Есть файл xml. Открываю его с помощью PowerQuery. Захожу -> offer (table) - нужен столбец param (со вложенными таблицами)
Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.
Если развернуть данные параметры то получим такой вид таблицы что все параметры развернутся вниз и таким образом названия позиций и другие параметры в исходной таблице будут дублироватся до тех пор пока не закончится вложенная табличка с параметрами и так далее по всех позициях.
Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз
, а в одну строку попорядке по в столбцах.
ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.
Понимаю что задача непростая. (по крайней мере для меня очень сложная) Как ее можно решить? Я в екселе чайник. Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ.
Извените за тупость, но в конец какого запроса, можете написать детально куда вставить, какую кнопочку нажать... никогда не сталкивался с таким кодом... ИЗВИНИТЕ
Мне же нужно будет другие свои файлы переводить из одного вида в другой (тот что Вы привели), но я не понимаю как это сделать. Можете расписать пошагово как это сделать.
Извините что надоедаю. Но действительно не понимаю как это сделать.. БЛАГОДАРЕН ЧТО УДЕЛИЛИ ВРЕМЯ НА ОТВЕТЫ..
yuraok, я все понимаю, но приложите хотя бы минимальные усилия к самообразованию. Тем более что в вашем кросс-посте на Эксельворлде Андрей вам дал чудесные ссылки для этого. От себя могу добавить еще вот такую. Для начинающих самое то.
yuraok написал: нужно будет другие свои файлы переводить из одного вида в другой
Не знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете. Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить. При одинаковой структуре файлов результат будет тоже одинаковым. Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
Михаил Л написал: Не знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете. Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить.При одинаковой структуре файлов результат будет тоже одинаковым.Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
Уже неделю не могу решить проблему.( Нужна Ваша помощь, уважаемые форумчане. Выше в теме уважаемые форумчане Михаил Л и 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, цитата - не бездумное копирование! Не обезьянка же, которая видит кнопку... Двоим можно было ответить в одном сообщении. Обращения по именам вполне достаточно. Это раз.
Второе. Появился вопрос. Для этого нужно обязательно сообщать в отдельном сообщении? Извените Извините
Андрей 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 написал:нужно будет другие свои файлы переводить из одного вида в другойНе знаю что вы можете в PQ, но адрес и имя файла поменять и обновить запрос, думаю сможете. Имя и адрес файла менять на Листе1. Запрос обновить можно ПКМ по таблице -> Обновить.При одинаковой структуре файлов результат будет тоже одинаковым.Вообщем, поменяли имя файла, обновили таблицу и скопировали результат куда вам надо. И по новой
В том то и дело что структура файла другая немного. И я незнаю как применить код к своему файлу xml с другой структурой.
Андрей VG написал: yuraok написал: ВАШ КОД К МОЕМУ XML-файлу.Я составлял код именно для вашего файла, который находится в архивеЦитата yuraok написал: Primer2_xml.rar (2.08 КБ)Просто поменяйте путь в коде к этому файлу на вашем компьютере.
Путь я поменял и все работает, но я хочу для себя научится, если мне нужно будет например развернуть 3 параметра или структура файла будет другая, то я не смогу применить код. Пеэтому хочу понять как применить данный код в таких случаях. Или как Вы его генерировали?
Извените за настойчивость, просто нету времени чтобы детальней изучать PowerQuery сейчас
yuraok написал: Пеэтому хочу понять... ...просто нету времени чтобы детальней изучать PowerQuery
вы не находите, что эти две части фразы между собой не сбиваются по смыслу?
Цитата
как Вы его генерировали?
я его написал в расширенном редакторе, то есть - без использования кнопок.
Цитата
мне нужно будет например развернуть 3 параметра
создать функцию, которая будет искать столбцы с типами данных - таблица, преобразовывать в записи, находить составлять для столбца уникальный список названий полей записей, используя этот список, разворачивать в новые столбцы. Чтобы это описать - потребуется статья. Вы уверены, что форумные ответы должны быть такими? Если у вас настолько нет времени, то закажите код и обучение по нему в разделе Работа форума. Специалисты, уверен, найдутся.
Андрей VG написал: я его написал в расширенном редакторе, то есть - без использования кнопок. Цитата yuraok написал:мне нужно будет например развернуть 3 параметрасоздать функцию, которая будет искать столбцы с типами данных - таблица, преобразовывать в записи, находить составлять для столбца уникальный список названий полей записей, используя этот список, разворачивать в новые столбцы. Чтобы это описать - потребуется статья. Вы уверены, что форумные ответы должны быть такими?Если у вас настолько нет времени, то закажите код и обучение по нему в разделе Работа форума. Специалисты, уверен, найдутся.