Наружное применение в Power Query M - PullRequest
0 голосов
/ 20 марта 2020

У меня есть таблица в Excel

Id
-----
1
2
3

Также у меня есть функция F, которая берет Id и возвращает таблицу. Мне нужно сделать что-то вроде

SELECT * FROM ExcelTable as et OUTER APPLY F(et.Id)

У вас есть идеи о том, как сделать это в Power Query M без l oop?

1 Ответ

0 голосов
/ 27 марта 2020

Кажется, что естественный способ сделать это в Power Query M - это использовать AddColumn и ExpandColumn. Вот эквивалент

SELECT * 
FROM ExcelTable e 
OUTER APPLY (
            SELECT * 
            FROM SomeOtherTbl s 
            WHERE s.SomeOtherId = e.Id
            )

В запросе Power M это

let
  SomeOtherTbl = Table.FromRecords({[SomeOtherId = 0, Field1 = "Hate MS docs"],
                                    [SomeOtherId = 1, Field1 = "samples formatting"]}),
  ExcelTable = Table.FromRecords({[Id = 0],
                                  [Id = 1]}),


  F = (id) => Table.SelectRows(SomeOtherTbl, each [SomeOtherId] = id),
  OuterApplyStep1 = Table.AddColumn(ExcelTable, "FFFF", each F([Id])),
  ColumnNames = Table.Schema(OuterApplyStep1{0}[FFFF])[Name],
  OuterApplyStep2 = Table.ExpandTableColumn(OuterApplyStep1, "FFFF", ColumnNames, ColumnNames)
in
  OuterApplyStep2

Приятно то, что меня не волнуют имена столбцов второй таблицы. Плохо то, что код не работает, если нет соответствия - Table.Schema падает.

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