基于用户的多次查询

时间:2019-05-27 15:12:07

标签: powerbi vlookup dax lookup powerquery

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

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  

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

1 个答案:

答案 0 :(得分:0)

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

我使用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作为对规则的引用

enter image description here

  1. 在RULE.PRIVELEGE_1和USER.PRIVILEGE上对用户进行合并查询。在这里使用左联接。

enter image description here

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

enter image description here

  1. 重新排列列

enter image description here

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

enter image description here

  1. 删除不必要的字段。

enter image description here

希望有帮助!