Я так понимаю, в первом случае вы просто заменили разворот столбца записей на сбор таблицы из записей?
Любопытное наблюдение. Нет под рукой подходящего массива, чтобы перепроверить.
Скорее всего, механизм добавления столбца к существующей таблице (что мы и наблюдаем в развороте) быстрее, чем механизм создания таблицы из записей. Снаружи это, конечно, не оценить толком, всё зависит от того, как реализована сама структура данных "таблица" в глубинах PQ и как написаны эти функции.
Я тоже привык считать, что таблица это скорее список записей. АндрейVG часто демонстрировал преимущества использования Table.ToRecords для последующей обработки с сбором в обратно таблицу в некоторых случаях (и есть подозрение, что большая часть встроенных функций обработки таблиц основана на Table.FromRecords <- List.Transform <- Table.ToRecords), но, судя по вашему тесту, эффективно это не всегда.
По поводу второго варианта - имейте в виду, что ExpandTableColumn всегда будет медленнее ExpandRecordColumn:
Код |
---|
Table.ExpandTableColumn = (table, column, columnNames, newColumnNames) as table =>
Table.ExpandRecordColumn(Table.ExpandListColumn(table, column), column, columnNames, newColumnNames) |
Немного парадоксально, не правда ли:
Код |
---|
let
Source = #table(2, List.Zip({{1..5},{6..10}})),
Custom1 = #table(2, {{1,Source}, {2,Source}}),
Custom2 = Table.ExpandListColumn(Custom1, "Column2")
in
Custom2 |
Третий вариант, подозреваю, эквивалентен чему-то вроде такого:
Код |
---|
Table.FromRecords(List.Combine(List.Transform(table[column], Table.ToRecords))) |
что тоже не выглядит супер-эффективным (хотя из-за наличия второго аргумента - списка столбцов - в Table.Combine я думаю всё еще навороченнее)