Страницы: 1 2 След.
RSS
Развернуть вертикальную вложенную таблицу (xml) в один ряд PowerQuery., XML
 
Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) - нужен столбец param (со вложенными таблицами)

Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.

Если развернуть данные параметры то получим такой вид таблицы что все параметры развернутся вниз и таким образом названия позиций и другие параметры в исходной таблице будут дублироватся до тех пор пока не закончится вложенная табличка с параметрами и так далее по всех позициях.

Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз

, а в одну строку попорядке по в столбцах.

ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.

Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ.
Изменено: yuraok - 26.05.2020 12:42:54
 
Файлы примеров прикрепленны. Полный xml и выгруженный xls.
Изменено: yuraok - 26.05.2020 12:28:39
 
yuraok, источник - выгруженная таблица
Код
// primer1 (2)
let
    Source = Excel.CurrentWorkbook(){[Name="primer1"]}[Content],
    #"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[#"param.Attribute:name"]), "param.Attribute:name", "param.Element:Text")
in
    #"Pivoted Column"
 
Михаил Л,
Позволю себе внести манюсенькую правку в ваш код ибо у ТСа в исходнике есть косяк с дублированием категорий.
Код
// primer1 (2)
let
    Source = Excel.CurrentWorkbook(){[Name="primer1"]}[Content],
    #"Pivoted Column" = Table.Pivot(
        Source, 
        List.Distinct(Source[#"param.Attribute:name"]), 
        "param.Attribute:name", 
        "param.Element:Text", 
        (t)=>Text.Combine(t,", ") )
in
    #"Pivoted Column"
Изменено: PooHkrd - 26.05.2020 16:39:13
Вот горшок пустой, он предмет простой...
 
Спасибо за помощь.
ОЧЕНЬ ПРОШУ напишите детальней куда написать етот код, я никогда не сталкивался с таким. (чайник)
 
Можно прямо в конец вашего запроса добавить.
Вот горшок пустой, он предмет простой...
 
Извените за тупость, но в конец какого запроса, можете написать детально куда вставить, какую кнопочку нажать... никогда не сталкивался с таким кодом...
ИЗВИНИТЕ
 
yuraok, я ж вам файл к сообщению прикрепил. Там все уже вставлено в ваш запрос, проверяйте.
Вот горшок пустой, он предмет простой...
 
К сожалению я не знаю где смотреть этот запрос :( Результат тот что нужен.

Какие действия пошагово мне нужно сделать чтобы из моего исходного файла
Цитата
yuraok написал:  Primer_xls.xlsx  (37.88 КБ)
получить Ваш результат который приведен в файле
Цитата
PooHkrd написал:  Копия Primer_xls.xlsx  (64.76 КБ)
Мне же нужно будет другие свои файлы переводить из одного вида в другой (тот что Вы привели), но я не понимаю как это сделать.
Можете расписать пошагово как это сделать.

Извините что надоедаю. Но действительно не понимаю как это сделать.. :(
БЛАГОДАРЕН ЧТО УДЕЛИЛИ ВРЕМЯ НА ОТВЕТЫ..
Изменено: yuraok - 26.05.2020 19:03:19
 
yuraok, я все понимаю, но приложите хотя бы минимальные усилия к самообразованию. Тем более что в вашем кросс-посте на Эксельворлде Андрей вам дал чудесные ссылки для этого. От себя могу добавить еще вот такую. Для начинающих самое то.
Изменено: PooHkrd - 26.05.2020 18:24:56
Вот горшок пустой, он предмет простой...
 
Извените не видел еще этих ссылок. Спасибо буду смотреть.
Просто Ваш ответ очень упростил бы мне жизнь, нет времени сейчас.
Но я Вас понимаю. Спасибо
Изменено: yuraok - 26.05.2020 18:41:29
 
yuraok, скриншоты вы делали?
 
Цитата
Михаил Л написал:
yuraok , скриншоты вы делали?
Да я.
 
yuraok, значит в запрос зайти сможете?
 
Цитата
Михаил Л написал:
yuraok , значит в запрос зайти сможете?
Спасибо иду разбиратся.
Извените за назойливость но Вы помогли мне сделать невыполнимое для меня задание.. СПАСИБО.
Изменено: yuraok - 26.05.2020 19:30:56
 
вот тут еще вариант решения точно такой же задачи
 
Цитата
yuraok написал:
нужно будет другие свои файлы переводить из одного вида в другой
Не знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете.
Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить.
При одинаковой структуре файлов результат будет тоже одинаковым.
Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
 
Цитата
Андрей Лящук написал:
вот тут  еще вариант решения точно такой же задачи
Спасибо, буду разбиратся на досуге.
 
Цитата
Михаил Л написал:
Не знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете. Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить.При одинаковой структуре файлов результат будет тоже одинаковым.Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
спасибо большое, буду разбиратся
 
Еще вопрос один появился.
Изменено: yuraok - 30.05.2020 19:13:03
 
Уже неделю не могу решить проблему.:((
Нужна Ваша помощь, уважаемые форумчане. Выше в теме уважаемые форумчане Михаил Л и PooHkrd помогли решить поставленную задачу с развертыванием вложенных этементов в горизонтальном порядке при помощи ниже приведенного кода:
Код
let    
Источник = Xml.Tables(File.Contents("C:\Users\Administrator\Desktop\primer1.xml")),
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Attribute:date", type datetime}}),
    shop = #"Измененный тип"{0}[shop],
    #"Измененный тип1" = Table.TransformColumnTypes(shop,{{"name", type text}, {"company", type text}, {"url", type text}}),
    offers = #"Измененный тип1"{0}[offers],
    offer = offers{0}[offer],
    #"Измененный тип2" = Table.TransformColumnTypes(offer,{{"url", type text}, {"currencyId", type text}, {"price", Int64.Type}, {"categoryId", Int64.Type}, {"picture", type text}, {"name", type text}, {"description", type text}, {"stock_quantity", Int64.Type}, {"Attribute:available", type logical}, {"Attribute:id", type text}, {"Attribute:group_id", Int64.Type}}),
    #"Развернутый элемент param" = Table.ExpandTableColumn(#"Измененный тип2", "param", {"Element:Text", "Attribute:name"}, {"param.Element:Text", "param.Attribute:name"}),

        #"Pivoted Column" = Table.Pivot(
        #"Развернутый элемент param", 
        List.Distinct(#"Развернутый элемент param"[#"param.Attribute:name"]), 
        "param.Attribute:name", 
        "param.Element:Text", 
        (t)=>Text.Combine(t,", ") )
in
    #"Pivoted Column"

Но стала задача развернуть в горизонтальном порядке два параметра как показано на скриншоте:



Как код применяется для  
Код
#"Развернутый элемент param",
То раскрыть последовательно нельзя так как пишет что нельзя применить для строк с вложенными элементами.

Нужно както сначала развернуть обе вложенные параметры а потом применить код...
Я попробовал чтото сочинить:
Код
let        
    Источник = Xml.Tables(File.Contents("C:\Users\Administrator\Desktop\Primer2_xml.xml")),
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Attribute:date", type datetime}}),
    shop = #"Измененный тип"{0}[shop],
    #"Измененный тип1" = Table.TransformColumnTypes(shop,{{"name", type text}, {"company", type text}, {"url", type text}}),
    offer = #"Измененный тип1"{0}[offer],
    #"Измененный тип2" = Table.TransformColumnTypes(offer,{{"url", type text}, {"price", Int64.Type}, {"categoryId", Int64.Type}, {"picture", type text}, {"name", type text}, {"description", type text}, {"stock_quantity", Int64.Type}, {"Attribute:available", type logical}, {"Attribute:id", Int64.Type}}),

    #"Развернутый элемент param" = Table.ExpandTableColumn(#"Измененный тип2", "param", {"Element:Text", "Attribute:name"}, {"param.Element:Text", "param.Attribute:name"}),

    #"Развернутый элемент param1" = Table.ExpandTableColumn(#"Развернутый элемент param", "param1", {"Element:Text", "Attribute:name"}, {"param1.Element:Text.1", "param1.Attribute:name.1"}),

    #"Pivoted Column" = Table.Pivot(
        #"Развернутый элемент param", 
        List.Distinct(#"Развернутый элемент param"[#"param.Attribute:name"]), 
        "param.Attribute:name", 
        "param.Element:Text", 

     #"Развернутый элемент param1", 
        List.Distinct(#"Развернутый элемент param1"[#"param1.Attribute:name.1"]), 
        "param1.Attribute:name.1", 
        "param1.Element:Text.1", 

        (t)=>Text.Combine(t,", ") )
in
    #"Pivoted Column"

Но не работает и пишет ошибку:
Цитата
Expression.Error: Аргументы 9 были переданы функции, которая ожидает значения между 4 и 5.Сведения:
   Pattern=
   Arguments=List

ПОМОЖЕТ КТО НАПИСАТЬ КОД ДЛЯ РАЗВЕРТЫВАНИЯ 2-Х ВЛОЖЕННЫХ ТАБЛИЦ ПО ГОРИЗОНТАЛИ КАК Я ОПИСЫВАЛ В НАЧАЛЕ ТЕМЫ??
БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН ЗА ПОМОЩЬ..

Прикрепляю исходный файл который нужно изменить.
Изменено: yuraok - 30.05.2020 20:35:24
 
yuraok, цитата - не бездумное копирование! Не обезьянка же, которая видит кнопку... Двоим можно было ответить в одном сообщении. Обращения по именам вполне достаточно. Это раз.

Второе.  Появился вопрос. Для этого нужно обязательно сообщать в отдельном сообщении?

Извените
Извините
 
Доброе время суток
Цитата
yuraok написал:
ПОМОЖЕТ КТО НАПИСАТЬ
А что в этом предложении делает слово "ПОМОЖЕТ"?
Вариант.
 
Цитата
Андрей VG написал:
Доброе время сутокЦитата yuraok  написал:ПОМОЖЕТ КТО НАПИСАТЬА что в этом предложении делает слово "ПОМОЖЕТ"?Вариант.

Прикрепленные файлы
Primer2_xml.xlsx  (23.31 КБ)
СПАСИБО БОЛЬШОЕ!!! ОЧЕНЬ ПОМОГЛИ!

Но не могу применить код к своему XML файлу, ту же проблему имел и с первым кодом, но сделал методом вставки и редактирования кода в меню PowerQuery - Просмотр - Расшыренный редактор.

ПОДСКАЖЕТЕ КАК ПРАВИЛЬНО ПРИМЕНИТЬ ВАШ КОД К МОЕМУ XML-файлу.

Ваш код:
Код
let
    Source = Xml.Tables(File.Contents("C:\Users\Administrator\Desktop\Primer2_xml.xml")),
    tableToRecord = (item) =>
    if item = null then
        null
    else let
        cols = Table.ToColumns(item)
    in  Record.FromList(cols{0}, cols{1}),
    getUniqueNames = (items) =>
        List.Distinct(List.Combine(List.Transform(List.Select(items, each _ <> null), each Record.FieldNames(_)))),
    shopData = Source{0}[shop],
    constShop = Record.RenameFields(shopData{0}[[name], [company], [url]], {{"name", "companyName"}, {"url", "companyUrl"}}),
    offerTable = shopData{0}[offer],
    paramsToRecord = Table.TransformColumns(offerTable, {
        {"param", tableToRecord, Record.Type},
        {"param1", tableToRecord, Record.Type}
    }),
    expandParam = Table.ExpandRecordColumn(paramsToRecord, "param", getUniqueNames(paramsToRecord[param])),
    expandParam1 = Table.ExpandRecordColumn(expandParam, "param1", getUniqueNames(paramsToRecord[param1])),
    addConstRecord = Table.AddColumn(expandParam1, "temporary", each constShop, Record.Type),
    expandConst = Table.ExpandRecordColumn(addConstRecord, "temporary", Record.FieldNames(constShop)),
    result = Table.AddColumn(expandConst, "Attribute:date", each Source{0}[#"Attribute:date"])
in
    result


Изменено: yuraok - 30.05.2020 21:23:42
 
Цитата
Михаил Л написал:
Цитата yuraok  написал:нужно будет другие свои файлы переводить из одного вида в другойНе знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете. Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить.При одинаковой структуре файлов результат будет тоже одинаковым.Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
В том то и дело что структура файла другая немного. И я незнаю как применить код к своему файлу xml с другой структурой.
 
Цитата
yuraok написал:
ВАШ КОД К МОЕМУ XML-файлу.
Я составлял код именно для вашего файла, который находится в архиве
Цитата
yuraok написал:
Primer2_xml.rar  (2.08 КБ)
Просто поменяйте путь в коде к этому файлу на вашем компьютере.
Изменено: Андрей VG - 30.05.2020 21:45:33
 
Цитата
Андрей VG написал:
yuraok  написал: ВАШ КОД К МОЕМУ XML-файлу.Я составлял код именно для вашего файла, который находится в архивеЦитата yuraok  написал: Primer2_xml.rar  (2.08 КБ)Просто поменяйте путь в коде к этому файлу на вашем компьютере.
Путь я поменял и все работает, но я хочу для себя научится, если мне нужно будет например развернуть 3 параметра или структура файла будет другая, то я не смогу применить код. Пеэтому хочу понять как применить данный код в таких случаях.
Или как Вы его генерировали?

Извените за настойчивость, просто нету времени чтобы детальней изучать PowerQuery сейчас :(
 
Цитата
yuraok написал: Пеэтому хочу понять...
...просто нету времени чтобы детальней изучать PowerQuery
вы не находите, что эти две части фразы между собой не сбиваются по смыслу?

Цитата
как Вы его генерировали?
я его написал в расширенном редакторе, то есть - без использования кнопок.

Цитата
мне нужно будет например развернуть 3 параметра
создать функцию, которая будет искать столбцы с типами данных - таблица, преобразовывать в записи, находить составлять для столбца уникальный список названий полей записей, используя этот список, разворачивать в новые столбцы. Чтобы это описать - потребуется статья. Вы уверены, что форумные ответы должны быть такими?
Если у вас настолько нет времени, то закажите код и обучение по нему в разделе Работа форума. Специалисты, уверен, найдутся.
 
Цитата
Андрей VG написал:
я его написал в расширенном редакторе, то есть - без использования кнопок. Цитата yuraok  написал:мне нужно будет например развернуть 3 параметрасоздать функцию, которая будет искать столбцы с типами данных - таблица, преобразовывать в записи, находить составлять для столбца уникальный список названий полей записей, используя этот список, разворачивать в новые столбцы. Чтобы это описать - потребуется статья. Вы уверены, что форумные ответы должны быть такими?Если у вас настолько нет времени, то закажите код и обучение по нему в разделе Работа форума. Специалисты, уверен, найдутся.
Спасибо за помощь.
 
В личкее обещали исправиться...
Закончится бан. приведите в порядок свои сообщения.
Страницы: 1 2 След.
Наверх