Страницы: 1
RSS
PQ. Транспортировать раскрываемые столбцы из List => Records в строчку среди других столбцов оставив только 1 строку со всеми значениями
 
Здравствуйте.
При запросе на разный товар поле options (List) содержит разное количество строк в ответе.
Дополнительная проблема состоит в том, что в последствии обернув в функцию запрос будет отдавать разное количество столбцов Name с их характеристиками по каждому айдишнику (вопрос кажется решил, добавил список AllHeaders, который нужно будет подставить при раскрытии).



В файле имеется:
функция nmid - это как сейчас работает, без высасывания содержимого в options.
Table- айдишки берутся с таблицы + кастомный столбец функция nmid.

Будет функцией (Форум) - тот же самый nmid, только не функция. На котором можно играться пытавшись развернуть options.

Колонка Name должна стать заголовками, а value и measure сцепил кастомной колонкой "пользовательская".  Развернуть эти колонки в строчку, оставив лишь 1 строку со всеми значениями.




А другого айдишника иное количество колонок Name из-за чего не представляю, как потом срастить одну таблицу.


Пример


Поскольку у "категории" свои наименования характеристик, то создал Список со всеми возможными заголовками из options по категориям. Проблем свести в одну таблицу разные категории не будет.

После того, если всё-таки возможно распарсить мою задачу, просьба обернуть сразу в функцию и попробовать на Table

Наскальные рисунки для понимания чего хочется.

parse.xlsx (111.29 КБ)


С радостью оплачу решение задачи, если она не тянет на бесплатную помощь. Сообщите, перенесу в платную ветку.
Также нет проблем, если имеется совершенно иное решение, а не моё из топика.

Пытался это провернуть, но жаловалось на тип Текст в колонке Name. Однако там чуть иное
https://stackoverflow.com/questions/64478411/transpose-single-column-in-dax-or-power-query
Изменено: jiumohoo - 22.05.2022 17:43:34
 
Перезалил файл добавив внутрь список всех возможных заголовков из options по двум айдишникам из файла. Подкорректировал текст задачи.

Альтернативное решение - обеими руками за.
Изменено: jiumohoo - 22.05.2022 17:48:08
 
jiumohoo, тут пока описание прочитаешь, устанешь :)
Зачем привязываться к наличию конкретных полей и разворачивать их?
f_nmid
Скрытый текст

Table
Скрытый текст
Изменено: surkenny - 23.05.2022 09:26:02
 
Цитата
surkenny написал:
jiumohoo, тут пока описание прочитаешь, устанешь :)
Зачем привязываться к наличию конкретных полей и разворачивать их?
f_nmid
    Скрытый текст        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16      ( nmid as number ) =>        let          Source =   Function  .InvokeAfter (            () => Json.Document ( Web.Contents (   " https://wbx-content-v2.wbstatic.net/ru/ "   & Number.ToText ( nmid ) &   ".json"   ) ),            #duration ( 0, 0, 0, 0.2 )          ),          transformOptions = List.Buffer (            List.Transform ( Source[options], ( r ) => [ Name = r[name], Value = Text.Combine ( { r[value]?, r[measure]? },   " "   ) ] )          ),          addFields = List.Accumulate (            transformOptions,            Record.SelectFields ( Source, {   "imt_name"  ,   "subj_name"  ,   "subj_root_name"  ,   "description"  ,   "contents"   } ),            ( s, c ) => Record.AddField ( s, c[Name], c[Value] )          )        in          addFields   
 
Table
    Скрытый текст        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      let        Source  = Excel.CurrentWorkbook(){[ Name =   "Таблица5"   ]}[Content],        Desc    = Table.TransformColumns ( Source, {   "nmid"  , f_nmid, type record } ),        toTable = Table.FromRecords ( Desc[nmid], null, MissingField.UseNull )    in        toTable   
 

Воу! В последнем шаге Table косяк с раскрытием таблицы
Отображает как понял заголовки только первой строчки в парсере, остальные невелирует


Шаг назад все заголовки вроде как присутствуют  :sceptic:
Изменено: jiumohoo - 23.05.2022 12:16:10
 
jiumohoo, чуть подправил:
f_nmid
Скрытый текст

Table
Скрытый текст
Изменено: surkenny - 23.05.2022 11:30:52
 
Цитата
surkenny написал:
jiumohoo, чуть подправил:
f_nmid
    Скрытый текст        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17      ( nmid as number ) =>        let          Source =   Function  .InvokeAfter (            () => Json.Document ( Web.Contents (   " https://wbx-content-v2.wbstatic.net/ru/ "   & Number.ToText ( nmid ) &   ".json"   ) ),            #duration ( 0, 0, 0, 0.2 )          ),          transformOptions = List.Buffer (            List.Transform ( Source[options], ( r ) => [ Name = r[name], Value = Text.Combine ( { r[value]?, r[measure]? },   " "   ) ] )          ),          addFields = List.Accumulate (            transformOptions,            Record.SelectFields ( Source, {   "imt_name"  ,   "subj_name"  ,   "subj_root_name"  ,   "description"  ,   "contents"   } ),            ( s, c ) => Record.AddField ( s, c[Name], c[Value] )          ),          toTable = Table.FromRecords ( { addFields } )        in          toTable   
 
Table
    Скрытый текст        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      let        Source  = Excel.CurrentWorkbook(){[ Name =   "Таблица5"   ]}[Content],        Desc    = Table.TransformColumns ( Source, {   "nmid"  , f_nmid, type table } ),        combine = Table.Combine ( Desc[nmid] )    in        combine   
 

Блин.. А я нагуглил иное решение и тоже работает.

Код
let
  Source  = Excel.CurrentWorkbook(){[ Name = "Таблица5" ]}[Content],
  Desc    = Table.TransformColumns ( Source, { "nmid", f_nmid, type record } ),
convertToList= Record.FieldNames(Record.Combine(List.Select(Table.Column(Desc,"nmid"), each _ <> "" and _ <> null))),
ListOfNamesToExpand = Table.ExpandRecordColumn(Desc,"nmid", convertToList)
in
  ListOfNamesToExpand


Ваш вариант более лучше, чем этот? Скорость или что там ещё может влиять
 
jiumohoo, вот эта штука Table.ExpandRecordColumn может медленно работать.
Тут 0,4 сек минимум на задержку + на загрузку. Поэтому по сравнению скорости нагугленный вариант похуже:
Изменено: surkenny - 23.05.2022 11:49:28
 
surkenny, большое спасибо. Дополнительно отблагодарил.

Тему можно закрыть.
Страницы: 1
Наверх