Страницы: 1
RSS
PQ как сделать столбец сведения по двум столбцам?, из плосской таблицы в кросс-таблицу.
 
Добрый день, не могу решить задачу в PQ по преобразованию плоской таблицы в кросс-таблицу. Вроде как нужно столбец сведения использовать, но там только один столбец в качестве значения преобразуется, а мне параллельно два столбца сразу нужно сделать. Может кто знает как это сделать?

 
1. сделайте объединение столбцов "Артикул" и "Цена конкурента" через ; например.
2. сделайте сведение по столбцу "Конкурент" без агрегирования
3. разделите каждый получившийся новый столбец конкурента по разделителю - я вручную каждый столбец разделить могу только сходу подсказать, можно функцию написать, чтобы сразу все столбцы разделить по разделителю

ниже код с разворотом одного из конечных столбцов:

let
   Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
   #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Артикул НАШ", type text}, {"Цена Наша", Int64.Type}, {"Конкурент", type text}, {"Артикул", type text}, {"Цена конкурента", type number}}),
   #"Объединенные столбцы" = Table.CombineColumns(Table.TransformColumnTypes(#"Измененный тип", {{"Цена конкурента", type text}}, "ru-RU"),{"Артикул", "Цена конкурента"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Сведено"),
   #"Сведенный столбец" = Table.Pivot(#"Объединенные столбцы", List.Distinct(#"Объединенные столбцы"[Конкурент]), "Конкурент", "Сведено"),
   #"Разделить столбец по разделителю" = Table.SplitColumn(#"Сведенный столбец", "конкурент 1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"конкурент 1.1", "конкурент 1.2"})
in
   #"Разделить столбец по разделителю"
Изменено: voler83 - 26.04.2024 10:08:03
 
Vladimir Ch, добрый день
вариант с группировкой
Изменено: AlienSx - 26.04.2024 10:26:27 (группировки по Артикул НАШ достаточно...)
Пришелец-прораб.
 
По мне так делать кросс-таблицу через PQ как то не гуманно :)
Исходная плоская и идеальна для построения сводной через модель сразу... вот в сводной и делать любые нужные шапки, быстрее, нагляднее
 
txxt, сводная не получится без заморочек, там в числовом столбце артикул как текстовое значение будет  
 
voler83, спасибо за идею, что-то сам не додумался до этого. AlienSx, большое спасибо - решение на 100% отвечает требованию, буду изучать!
Цитата
txxt написал:
По мне так делать кросс-таблицу через PQ как то не гуманно
безусловно, но есть последующие задачи с этим, в которых проще формулами решать, чем через сводную, по причине, что сводная в значениях практически не может с текстом работать (а это нужно в дальнейшем). Еще раз всем огромное спасибо!
 
Vladimir Ch, вариант:
Код
let
    fr = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    nm = List.Buffer(Table.ColumnNames(fr)),
    nmk = List.Buffer(List.Combine(List.Transform(List.Distinct(Table.Column(fr, nm{2})), (x)=> {x&" (артикул)", x&" (цена)"}))),
    f = (x)=> Table.ToList(x, (y)=>Record.FromList(List.Skip(y, 3), {y{2}&" (артикул)", y{2}&" (цена)"})),
    a1 = Table.Group(fr, List.FirstN(nm,2), {"new", (x)=>Record.Combine(f(x))}),
    to = Table.ExpandRecordColumn(a1, "new", nmk)
in
    to
 
Garrys, отлично, респект Вам тоже!
Страницы: 1
Наверх