2015-05-28 5 views
1

Я хочу отфильтровать одну таблицу, используя столбец в другой таблице. Вот моя таблица для фильтрации:Как добавить динамический фильтр в Power Query

Таблица 1

deviceid, user_number 
001,400 
002,500 
003,600 
004,700 
009,1000 

У меня есть еще один стол:

Таблица 2

deviceid 
001 
003 
004 

Теперь я могу фильтровать таблицу 1 с таблицу 2, написав что-то вроде этого:

"Filtered Rowxx" = Table.SelectRows(#"Column1", each ([deviceid] <> "001" 
and [deviceid] <> "003" and [deviceid] <> "004") 

Поскольку таблица 2 изменяется все время, как я могу определить запрос по запросу источника для достижения этого, пожалуйста?

ответ

0

Вы можете получить столбец deviceid таблицы 2, используя Table2[deviceid], который дает вам список. Мы можем проверить, если текущий DeviceID находится в списке с List.Contains, так что ваш фильтр может выглядеть примерно так:

"Filtered Rowxx" = Table.SelectRows(#"Column1", each not List.Contains(Table2[deviceid], [deviceid]))

+0

спасибо за ваш ответ @Alejandro Lopez-Lago - MSFT, я пробовал это сегодня, так как моя таблица 1 имеет более 200 000 строк, для выполнения запроса потребовалось очень долгое время, и в итоге возникла ошибка: не удалось загрузить в модель данных. Знаете ли вы какой-либо другой способ достичь этого, заранее спасибо –

+0

На самом деле я блуждал там, чтобы создать строку фильтра из столбца, --------- как создать строку из столбца deviceid columnid , [deviceid] <> "001" и [deviceid] <> "003" и [deviceid] <> "004" –

1

Это звучит, как вы хотите, анти-соединения.

Table.Join с JoinKind.LeftAnti будет отфильтровывать строки из левой таблицы, соответствующие правой таблице.

let 
    Column1= #table({"deviceid", "user_number"}, { {"001", "400"}, {"002", "500"}, {"003", "600"}, {"004", "700"}, {"009", "1000"} }), 
    Table2 = #table({"__deviceid"}, { {"001"}, {"003"}, {"004"} }), 

    AntiJoin = Table.Join(#"Column1", "deviceid", Table2, "__deviceid", JoinKind.LeftAnti), 
    SelectColumns = Table.SelectColumns(AntiJoin, {"user_number", "deviceid"}) 
in 
    SelectColumns 

Одним из преимуществ Table.Join это, вероятно, сложить фильтр к каркасному реляционной базе данных сервера, в то время как список операции, как правило, не складываются. (Но если ваш запрос выполняется быстро, это не имеет большого значения.)

Одна из проблем с Table.Join заключается в том, что он не может обрабатывать несколько столбцов с тем же именем, поэтому мне пришлось переименовать столбец «deviceid» в таблице2.

Смежные вопросы