Страницы: 1
RSS
В Power Query сделать так, чтобы 1,2,3 из строк стали заголовками, а то, что были рядом с ними в строке - строками
 
Всем доброго времени суток.
Задача, наверное, простая, но не знаю как формулировать запрос, чтобы найти в интернете информацию, поэтому пишу тут и прошу помощи тех, кто уже более-менее разобрался с Power Query
Суть в том, что есть таблица в которой в первом столбце идет 1,2,3 (каждая цифра в своей строке), а напротив этих 1,2,3 тоже в строках во втором столбце этой таблицы, идет некий текст.
Задача очень простая, нужно так "развернуть" таблицу, чтобы 1,2,3 стали как бы заголовками, то есть, чтобы получилось три столбца, а количество строк стало таким, сколько было в исходных данных этих наборов вида 1,2,3
В приложенном файле пример. Там, по идее, все понятно должно быть.
В этих данных все идеально, так как 1,2,3 есть всегда (и они всегда идут в одном и том же порядке). В реальных данных, может быть так, что или 2 не хватает в одном или нескольких блоков из этих1,2,3, или тройки не хватает или единицы (или порядок иногда 1,2,3, иногда 2,1,3 иногда 3,1,2 и т.д.)... Если в такой ситуации задача нерешаема - напишите, плиз, тоже об этом.
 
Пробовал сделать через столбец сведения без агрегирования (там в файле есть запрос), но, как видно, выдало ошибку.
 
Как-то так:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Дано"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Номер", Int64.Type}, {"Текст", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Измененный тип", "Индекс", 0, 1),
    #"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Индекс", each Number.IntegerDivide(_, 3), Int64.Type}}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Integer-Divided Column", {{"Номер", type text}}, "ru-RU"), List.Sort(List.Distinct(Table.TransformColumnTypes(#"Integer-Divided Column", {{"Номер", type text}}, "ru-RU")[Номер])), "Номер", "Текст"),
    #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"Индекс"})
in
    #"Removed Columns"

Вы бы поиском по форуму все таки пользовались что ли. Эта тема всплывала много раз уже.
И по предыдущей теме ответ помог?
Изменено: PooHkrd - 16.07.2019 14:02:39
Вот горшок пустой, он предмет простой...
 
спасибо огромное за ответ! я бы и рад пользоваться поиском, но не знал как сформулировать запрос для поиска..
(я об этом сразу написал)
если подскажете, как, в данном случае, следовало было искать, то будет вообще хорошо! )
 
Konstantin Zhi, легко, вот вы нашли, что вроде бы для решения задачи можно использовать функцию сведения столбца без агрегации данных, но в ячейках выдало ошибку. Смотрим в формулу, которую генерит данная кнопка и видим там функцию Table.Pivot. Вот её родимую в поиске форума и ищем. Увидите вагон примеров её применения, ошибки, с которыми граждане сталкиваются, и очень четкие объяснения от Андрея VG, Максима Зеленского и других опытных товарищей откуда ошибки и как их победить. Иной раз и я умное слово, бывает, вставляю. :oops:
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
вот вы нашли, что вроде бы для решения задачи можно использовать функцию сведения столбца без агрегации данных, но в ячейках выдало ошибку
я это не находил, это методом тыка..
забавно, что нужно было полезть в "код" и там найти функции и по ней искать, я бы не додумался, теперь буду умнее, спасибо! )
 
Цитата
PooHkrd написал:
Вы бы поиском по форуму все таки пользовались что ли
Привет, Алексей.
Вроде не всё так просто в силу
Цитата
Konstantin Zhi написал:
или тройки не хватает или единицы (или порядок иногда 1,2,3, иногда 2,1,3 иногда 3,1,2 и т.д.).
Допустим есть последовательность 2, 3, 1, 3, 2 - это сначала 2 и 3 с пропущенной единицей и затем 1, 3, 2? Или это сначала 2, 3, 1, а затем 3, 2 с пропущенной единицей? :)
 
Цитата
Андрей VG написал:
Допустим есть последовательность 2, 3, 1, 3, 2 - это сначала 2 и 3 с пропущенной единицей и затем 1, 3, 2? Или
Да, в если так, то задача нерешаема не то что PQ, а вообще.. (ИМХО)
 
Код PooHkrd рабочий! Спасибо!

Однако, анализируя код PooHkrd  
Код
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Integer-Divided Column", {{"Номер", type text}}, "ru-RU"), List.Sort(List.Distinct(Table.TransformColumnTypes(#"Integer-Divided Column", {{"Номер", type text}}, "ru-RU")[Номер])), "Номер", "Текст"),

и свой
Код
   #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Столбец с выполненным целочисленным делением", {{"Номер", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Столбец с выполненным целочисленным делением", {{"Номер", type text}}, "ru-RU")[Номер]), "Номер", "Текст"),

Вижу разницу List.Sort и List.Distinct - это существенно? на что влияете?
Кроме того, почему-то отсутствует "шестеренка" в этом шаге у PooHkrd (почему?)
Изменено: Konstantin Zhi - 16.07.2019 15:35:35
 
Konstantin Zhi, потому что List.Sort туда вставил я ручками и List.Distinct там тоже есть если что. Это для упорядочивания наименований будущих столбцов, можно было так не делать, а просто после сведения переставить столбцы руками. Но лично мне вот так больше нравится.
И оформите код тегами CODE, а то придут или ребенок злой, или кот голодный и вас наругают.
Изменено: PooHkrd - 16.07.2019 15:17:46
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх