Несколько поисков на основе пользователей - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь отобразить список пользователей, которые нарушили правила в системе. Данные, над которыми я работаю, структурированы так:

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    

Цель состоит в том, чтобы найти пользователей, которые содержат и PRIVILEGE_1, и PRIVILEGE_2 из TABLE_2, и вернуть их в новую таблицу со столбцами «USER» и «RULE_ID», чтобы показать, какие правила они нарушили. Например ...

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

Пробовал фильтрацию и поиск значений, но пока не смог найти решение. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 29 мая 2019

Хорошо, вот как я интерпретирую ваш запрос: все «правила» состоят из двух привилегий.Найти всех пользователей, которые связаны с обеими привилегиями в правиле.

Я решил это с помощью Power Query.

Я использовал ваши образцы данных (я назвал Table1 «Пользователь» и Table2 «Правило») и создал таблицу результатов 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

Выполнить слияние с пользователем в RULE.PRIVELEGE_1 и USER.PRIVILEGE.Используйте здесь левое соединение.

enter image description here

Развернуть столбец «Пользователь» из объединенной таблицы

enter image description here

Изменение порядка столбцов

enter image description here

Выполнить еще один запрос на слияние с пользователем.Обратите внимание, что это объединение состоит из двух полей и является внутренним, а не левым соединением.Удерживайте нажатой клавишу [Ctrl], чтобы выбрать более одного поля в диалоговом окне запросов на слияние.Убедитесь, что вы выбрали поля в том же порядке (маленькие цифры 1 и 2 появятся в заголовках столбцов, чтобы указать порядок).

enter image description here

Удалите ненужные поля.

enter image description here

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...