Страницы: 1
RSS
Многоуровневый заголовок средтвами Power Query, как собрать из многоуровневого заголовка нормальтную таблицу все знают - а что если обратно из таблицы сделать отчет с многоуровневой шапкой
 
Вопрос - у меня есть таблица с датой количеством и ценами,
я хочу средствами PQ трансформировать ее в Таблицу с многоуровневым заголовком
но возникает затруднение с названиями столбцов и трансформацией строки заголовка

буду благодарен за совет как это сделать в PQ

(про сводную понимаю, но хочется заморочитmся с PQ  :)  )
Изменено: Blood81 - 03.03.2023 13:54:50
 
на выходе PQ будет умная таблица. а вы попробуйте создать ваш макет в умной руками- если получится, то и в PQ можно будет.
 
Blood81, именно заголовок многоуровневым у плоской умной таблицы (а это и есть результат запроса) быть не может.
Но можно такое извращение придумать:
Код
let
  data = Excel.CurrentWorkbook(){[ Name = "Исходные" ]}[Content],
  typed = Table.TransformColumnTypes ( data, { { "Дата", type date } } ),
  transform = Table.TransformColumns ( typed, { { "Дата", ( x ) => Date.MonthName ( x ), type text } } ),
  unpivot = Table.Unpivot ( transform, { "Количество", "Цена" }, "Атрибут", "Значение" ),
  combine = Table.CombineColumns ( unpivot, { "Дата", "Атрибут" }, Combiner.CombineTextByDelimiter ( "_", QuoteStyle.None ), "Сведено" ),
  pivot = Table.Pivot ( combine, List.Distinct ( combine[Сведено] ), "Сведено", "Значение" ),
  clmnNames = Table.ColumnNames ( pivot ),
  transformClmnNames = List.Buffer ( List.Transform ( clmnNames, ( x ) => Text.Split ( x, "_" ) ) ),
  headers = List.Buffer ( List.Transform ( transformClmnNames, ( x ) => x{0} ) ),
  firstRow = List.Buffer ( List.Transform ( transformClmnNames, ( x ) => x{1}? ) ),
  new_headers = List.Generate (
    () => [ k = 0, n = 0, res = headers{k} ],
    each [k] < List.Count ( headers ),
    each [ k = [k] + 1, n = if headers{k} = headers{k - 1} then [n] + 1 else [n], res = if n = [n] then headers{k} else Text.Repeat ( " ", n ) ],
    each [res]
  ),
  result = Table.FromRows ( { firstRow } & Table.ToRows ( pivot ), new_headers )
in
  result
 
Vik_tor, вроде, по рисунку (по заливке) ТС сам понимает, что заголовки будут только в первой строке. А первая строка таблицы - это вторая часть заголовков.
Вообще я не понимаю, зачем это нужно при наличии сводных :)
Можно сказать, что тогда DAX нужно изучать (для примера не особо-то и нужно), но так и в M ТС не так силен, чтобы эту обработку сделать :)
Я к тому, что такие данные потом фиг проанализируешь. Нужна именно плоская таблица (а не сводная, как мы сейчас в PQ делаем) данных, чтобы потом любую аналитику по ней делать.
 
surkenny, согласен на 300%.
 
surkenny,  это маленькая часть другого проекта, плюс просто интерес - а получится ли так сделать?
сами же говорите в М не силен, а как еще научиться если не делать что то сложное )))

с пробелами интересное решение )))
а вот с firstRow не совсем понял, transformClmnNames дает список состоящий из списков, а вот следующие две функции ( x ) => x{0} и ( x ) => x{1}, они что выбирают, столбец или строку из list? а как это же list?


про DAX прости не понял чем он тут пригодится?

у меня было рабочее решение где к результату одного запроса подтягиваются данные формулой Получить данные сводной таблицы,
но там есть ограничения и пользователю ее не отдашь просто так, задолбят вопросами.... а так результат запроса легкая таблица без формул, без вопросов
Страницы: 1
Наверх