Power Query - Table.SelectRows

У меня есть две таблицы / запроса в Excel. Одна таблица - это измерение «Группа», в котором перечислены все группы вместе с некоторыми метаданными о каждой группе. Следующая таблица представляет собой таблицу фактов, в которой содержится ежемесячная информация для каждой группы. Таблицы выглядят так:

Таблица 1

GroupName       Location     GroupID   
Even Steven     New York     04952
BillyBobs       Texas        04035
Nunya           California   04859

Таблица 2

GroupID     Description    SalesVolume
04952       Even Steven    59003
04035       BillyBobs      98390
04859       Nunya          50194   

Во всех смыслах и целях GroupName и Description - разные имена для одного и того же (GroupName = Description)

Что я пытаюсь сделать, так это настроить так, чтобы, когда я фильтрую Table1 на GroupName, Table2 также будет отфильтрован. Итак, если я отфильтрую даже Стивена в Table1, тогда Table2 будет показывать только BillyBobs и Нунья.

Мой текущий сценарий Power Query выглядит следующим образом (примечание: у меня есть еще одна таблица с именем «Query», это просто нефильтрованный SELECT * FROM dbo.Table, я использую ее как источник для Table2. Таблица1 поступает из другой таблицы в той же БД):

let
    Source = Excel.CurrentWorkbook(){[Name="Query"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Month Year", type date}}),
in
    #"Removed Columns"

Я считаю, что мне нужно добавить шаг, аналогичный следующему примеру, найденному в Интернете, но я не могу понять, как сказать, что мне нужны только строки, которые видны в таблице Group.

Table.SelectRows(Sales_Customers, each List.Contains(Query, [CustomerCategoryID]))

person SUMguy    schedule 27.03.2018    source источник


Ответы (1)


Во-первых, нам нужно каким-то образом для PowerQuery узнать, отфильтрована ли строка или нет. Один из подходов - использовать функцию SUBTOTAL. Добавьте новый Subtotal столбец в свой Table1 по следующей формуле:

=IF(SUBTOTAL(104,[@GroupID])=[@GroupID], "Visible", "Hidden")

Теперь объедините Table1 с Table2, совпадающими с Table1[GroupName] и Table2[Description].

Внутреннее объединение

Разверните только столбец Subtotal, а затем отфильтруйте только видимые строки.

Видимый фильтр

person Alexis Olson    schedule 27.03.2018
comment
Этот Table.SelectRows не работал. Тип внутреннего соединения работает, но я хочу, чтобы пользователь мог выполнять фильтр в самой таблице Excel. Единственный способ, которым эта опция работает, - это если я перейду к запросу Table1 и вручную предварительно отфильтрую столбец в качестве шага запроса ... - person SUMguy; 27.03.2018
comment
Если вы хотите, чтобы пользователь мог динамически фильтровать таблицы без обновления вручную, то PowerQuery - неподходящий инструмент. - person Alexis Olson; 27.03.2018
comment
О, я планирую обновить их вручную с помощью кнопки «Обновить все» после того, как они выберут свои фильтры. Я просто имею в виду, что они не могут зайти в Power Query и отредактировать запрос - person SUMguy; 27.03.2018
comment
OK. Проверьте мою правку. Думаю, у меня есть кое-что, что будет работать. - person Alexis Olson; 27.03.2018