Power Query - запросы слияния возвращают true или false - PullRequest
0 голосов
/ 09 марта 2019

Хотелось бы узнать, возможно ли с языком M возвращать только True или False, если слияние двух запросов соответствует данным или нет?

Более или менее, что-то похожее на функцию ISNA в Excelза функцию VLOOKUP

Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2019

I думаю это может обеспечить то, что вы хотите, особенно с помощью слияния:

Если я начну с двух таблиц из двух разных запросов (мои запросы называются Query1 и Query2):

Query1 Query2

Если я хочу увидеть, какие из Query2 отсутствуют в Query1, я нажимаю Home> Merge Queries>, затем настраиваю диалоговое окно, как это, и нажимаю OK:

enter image description here

Что дает мне это:

enter image description here

Затем я раскрываю таблицы в столбце Query2, нажимая enter image description here в правом верхнем углу столбца, чтобы получить:

enter image description here

Затем я нажимаю enter image description here слева от строки формул и набираю = Table.TransformColumns(#"Expanded Query2", {"Column1.1", each if _ = null then false else true}) в строке формул и нажимаю ввод, чтобы получить следующее:

enter image description here

(Если вы посмотрите на правую сторону экрана, под Прикладные шаги , вы увидите, что Расширенный запрос2 был предыдущим шагом. Каждый шаг также оказывается состоянием таблицы, как результат запроса - это состояние таблицы. Вы можете использовать эти состояния таблицы как таблицы, как вы используете результаты запроса как таблицы ... потому что они в основном являются таблицами. Этот код преобразует столбец из этого предыдущего состояния таблицы. Кроме того, если вы не используете Чтобы увидеть панель формул, откройте вкладку «Вид» и установите флажок «Панель формул».)

***** Добавлен следующий комментарий @Frederic Le Guen *****

Вот более прямой способ использования List.Contains, который может более соответствовать тому, что вы ищете.

Начиная с тех же двух таблиц из тех же двух запросов, которые я делал выше, с запросами с именами Query1 и Query1 и Query2:

Query1 Query2

Перейдите в Query1 и добавьте в него столбец - Добавить столбец> Пользовательский столбец - и настройте его следующим образом:

enter image description here

и нажмите ОК.

Вы получите это:

enter image description here

0 голосов
/ 09 марта 2019

Скажите, что я хочу проверить, какие значения в этой таблице ("firstTable"):

First table

существуют в этой таблице ниже ("secondTable"):

Second table

Подход 1

Если вы хотите только проверить наличие (а не выполнитьобъединить), тогда это может быть один подход:

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    check = Table.AddColumn(firstTable, "Is column A in column B?", each Table.Contains(secondTable, [column B = [column A]]), type logical)
in
    check

подход 2

Аналогичный, но более подробный подход может быть:

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    check = Table.AddColumn(firstTable, "Is column A in column B?", each let colA = [column A], lookup = Table.MatchesAnyRows(secondTable, each [column B] = colA) in lookup, type logical)
in
    check

Подход 3

Этот подход фактически выполняет слияние, а затем проверяет, содержит ли каждая объединенная / объединенная таблица какие-либо строки.Я бы предположил, что он будет медленнее других (теоретически он будет пытаться объединить / сопоставить все строки и не будет выходить, как только будет найдено одно совпадение), но я могу ошибаться, и это зависит от Table.Join 'внутренняя реализация.

let
    firstTable = Table.FromColumns({List.Numbers(1,10,1)}, type table [column A=Int64.Type]),
    secondTable = Table.FromColumns({List.Numbers(1,10,2)}, type table [column B=Int64.Type]),
    merged = Table.NestedJoin(firstTable, {"column A"}, secondTable, {"column B"}, "Is column A in the second table?", JoinKind.LeftOuter),
    isEmpty = Table.TransformColumns(merged, {{"Is column A in the second table?", Table.IsEmpty, type logical}})
in
    isEmpty 

Я дал три подхода, поскольку вы не показали свои данные / пример.Трудно предположить, что будет хорошо работать.Но, надеюсь, вы можете попробовать их, и одна из них будет полезна / эффективна для размера ваших данных.

Обратите внимание, что первые две строки (каждого фрагмента M) предназначены только для создания фиктивных таблиц firstTable и secondTable.

...