Страницы: 1
RSS
Вложенная таблица в ячейке, записать значения в строчку, Обработка XML-таблицы в Power Query
 
Здравствуйте!

Не нашла на форуме решения, поэтому прошу помощи.
Есть таблица XML с несколькими уровнями вложенных атрибутов. Когда таблицу с помощью Power Query преобразуем в таблицу Excel, в тех местах, где атрибутов несколько, появляется вложенная таблица.

Например, исходный код такого вида:
Код
<object ID="7412">
    <name>Объект 1</name>
    <attrubitesA>
        <A>стат</A>
        <A>дин</A>
    </attrubitesA>
    <attributesB>
        <B>is-open</B>
        <B>STAT</B>
    </attributesB>
   </object>

При преобразовании attrubitesA и attributesB будут отдельными столбцами. При этом, если вложенных атрибутов нет, значение будет null, если вложенный атрибут один – он будет выводиться текстом.
Проблемы начинаются, когда атрибутов больше одного: в этом случае в ячейке появится вложенная таблица. Нужно как-то преобразовать эту таблицу (в каждой ячейке) в текстовую строку, чтобы значения разделялись запятой. Количество значений может быть различным.

Прикладываю файлы для примера. Исходные данные в .txt, т.к. в .xml файл не грузится. В .xlsx то, что получается на выходе и то, как это должно быть в итоге.
Изменено: dura_leksina - 08.10.2019 21:06:02
 
dura_leksina, PQ ругается на отсутствие файла пример1.xml, приложите его.
 
Цитата
Murderface_ написал:
dura_leksina , PQ ругается на отсутствие файла пример1.xml, приложите его.
Я вложила его в .txt, потому что форма не давала приложить в .xml
Не знаю, почему так, была ошибка про размер файла, хотя в нем всего 1 кб
Изменено: dura_leksina - 09.10.2019 09:51:06
 
dura_leksina, вернитесь, прведите в порядок сообщение. При цитировании тоже нужно думать. Вы что вставили? Зачем вообще здесь цитата?
 
как-то так
Код
let
    Источник = Xml.Tables(Web.Contents("https://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=361634&action=download")),
    #"Развернутый элемент object" = Table.ExpandTableColumn(Источник, "object", {"name", "city", "address", "attrubitesA", "attributesB", "workhours", "Attribute:ID"}),
    Custom1 = Table.ReplaceValue(#"Развернутый элемент object",null,null,(a,b,c)=>if Table.RowCount(a)>0 then Text.Combine(List.Combine(List.Transform(Table.ToColumns(a){0},(l)=>if Value.Is(l, type table) then Table.ToColumns(l){0} else {l})),", ") else null,{"attrubitesA","attributesB"})
in
    Custom1
Страницы: 1
Наверх