首页 > 解决方案 > 基于用户的多次查找

问题描述

我正在尝试显示在系统中违反规则的用户列表。我正在处理的数据结构如下:

TABLE_1:   
USER | PRIVILEGE        
 A    |  1  
 A    |  2  
 A    |  3  
 B    |  1  
 B    |  3  
 C    |  2  
 C    |  3  
 C    |  4  

TABLE_2:   
RULE_ID | PRIVILEGE_1 | PRIVILEGE_2       
    1   |       1     |       3     
    2   |       2     |       3    

目标是从 TABLE_2 中找到同时持有 PRIVILEGE_1 和 PRIVILEGE_2 的用户,并将它们返回到一个新表中,其中包含“USER”和“RULE_ID”列,以显示他们违反了哪些规则。例如...

TABLE_3:   
USER  | RULE_ID
 A    |  1  
 A    |  2  
 B    |  1  
 C    |  2  

尝试过滤和查找值,但还没有找到解决方案。任何帮助表示赞赏!

标签: powerbivlookupdaxlookuppowerquery

解决方案


好的,这就是我对您的请求的解释:所有“规则”都由两个特权组成。在规则中查找与这两种权限相关联的所有用户。

我使用 Power Query 解决了这个问题。

我使用了您的示例数据(我称 Table1“User”和 Table2“Rule”)并创建了结果表 User_Rule。这是来自高级编辑器的最后一个 M 查询。

let
    Source = Rule,
    #"Merged Queries" = Table.NestedJoin(Source, {"PRIVILEGE_1"}, User, {"PRIVILEGE"}, "User", JoinKind.LeftOuter),
    #"Expanded User" = Table.ExpandTableColumn(#"Merged Queries", "User", {"USER"}, {"USER"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded User",{"USER", "RULE_ID", "PRIVILEGE_1", "PRIVILEGE_2"}),
    #"Merged Queries1" = Table.NestedJoin(#"Reordered Columns", {"PRIVILEGE_2", "USER"}, User, {"PRIVILEGE", "USER"}, "User", JoinKind.Inner),
    #"Removed Columns" = Table.RemoveColumns(#"Merged Queries1",{"PRIVILEGE_1", "PRIVILEGE_2", "User"})
in
    #"Removed Columns"

作为应用步骤:

  1. 创建 User_Rule 作为对 Rule 的引用

在此处输入图像描述

  1. 对 RULE.PRIVILEGE_1 和 USER.PRIVILEGE 上的用户执行合并查询。在这里使用左连接。

在此处输入图像描述

  1. 从合并表中展开“用户”列

在此处输入图像描述

  1. 重新排序列

在此处输入图像描述

  1. 对用户进行另一个合并查询。请注意,此联接在两个字段上,它是内部联接,而不是左联接。按住 [ctrl] 键可从合并查询对话框中选择多个字段。确保以相同的顺序选择字段(小数字 1 和 2 将出现在列标题中以指示顺序)。

在此处输入图像描述

  1. 删除不必要的字段。

在此处输入图像描述

希望能帮助到你!


推荐阅读