Страницы: 1
RSS
Развернуть один столбец в несколько в PQ, Речь именно про Power Query
 
Есть некая виртуальная таблица в одном из столбцов используются значения в формате "списков" (list). Каждый "список" (list) содержит разное количество значений в формате "запись" (record). Проблема в том, что этот "record" представляет собой некую ссылку на другую таблицу (ну как я понимаю, т.к. если проваливаешься в него получаешь новую таблицу. Может правильнее сказать массив?). Мне нужно взять из каждой "record" каждого "list" определённое значение (номер строки с данными известен, он постоянен для всех "record", количество значений которое могут принимать искомые данные из "record" тоже известно) и положить в новые столбцы.

Попытка преобразовать столбец с данными в формате "list" в столбцы через графический интерфейс приводит к ошибке (т.к. list это не набор текстовых значений). Единственное, можно развернуть данные в новые строки, но мне то столбцы нужны. В идеале, значения должны попадать каждый в свой столбец (но это в идеале, пусть хоть вообще в столбцы попадут)

По идее нужно как-то выдернуть значения из record а потом уже преобразовывать list (из выбранных значений) в столбцы, но как именно это сделать я не представляю. Как к записям вообще можно обратиться, если их ещё нет в таблице? Хотя, может я вообще не в том направлении иду и есть другой способ?

P.S.
Изначальная таблица по факту результат запроса из бд, потому и такая структура "record", ну и потому приложить сюда нечего (ну не код запроса давать - там данных то нет) Если надо, могу картинки покидать, если это кому-то поможет.

P.P.S. Выглядит примерно так
Скрытый текст
Хотелось бы получить что-то типа:
Скрытый текст
Изменено: Light-XP - 01.06.2020 23:12:35 (Добавил визуальные примеры)
 
в record нет строк, есть поля; к ним можно обращаться по названию Record.Field() например ну и
Код
List.Transform(list, each Record.Field(_,"нужная строка"))

без примера трудно что-то советовать
Изменено: buchlotnik - 01.06.2020 23:12:26
Соблюдение правил форума не освобождает от модераторского произвола
 
Light-XP, примерно так:
Код
let
    Source = Record.ToTable([name1={[a="aa1",c="cc1",z="zz1"],[a="aa2",c="cc2",z="zz2"],[a="aa3",c="cc3",z="zz3"]},
                             name2={[a="aa3",c="cc3",z="zz3"]},
                             name3={[a="aa1",c="cc1",z="zz1"],[a="aa3",c="cc3",z="zz3"]}]),
    n=1, //заранее известный порядковый номер искомого поля в записи (нумерация с нуля)
    transform = Table.TransformColumns(Source, {"Value", each Table.Transpose(Table.FromRecords(_)){n}}),
    expand = Table.ExpandRecordColumn(transform, "Value", List.Union(List.Transform(transform[Value], Record.FieldNames)))
in
    expand
 
buchlotnik, , спасибо, сам думал в сторону List.Transform, но не знал как туда прицепить each. По сути эта формула вытаскивает из одного list нужный мне параметр, что уже неплохо.

Aleksei_Zhigulin, то что надо, на гипотетическом запросе отрабатывает хорошо. На реальном, правда, вылезают нюансы (например не все строки list, бывают и null) но это я сам поправил.

Хочется всё же ещё поперфекционировать: можно ли сделать так, чтобы записи разворачивались в своих столбцах? Т.е. чтобы все условные cc1 выходили в первом столбце, сс2 во втором и так далее?
Страницы: 1
Наверх