запрос мощности - M Language - конвертировать столбцы в строки - PullRequest
0 голосов
/ 23 июня 2018

У меня есть электронная таблица, содержащая столбец «Имена» в качестве названия продукта, количества, стоимости.

Я хочу преобразовать это в строки данных, которые содержат название продукта, количество, стоимость.

См. Изображение ниже относительно того, что я хочу.

enter image description here

Как лучше всего справиться с этим в Power Query M Language?

Не уверен, хочу ли я поворачивать только столбцы, которые имеют название, количество и стоимость товара?

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Они здесь задают поворот и отмену поворота.


Начиная с такой таблицы:

Start

Выберитещелкните правой кнопкой мыши четыре столбца и выберите «Преобразование»> «Удалить столбцы», чтобы получить эту таблицу:

Unpivoted

Теперь создайте пользовательский столбец, который классифицирует значение по этой формуле.

if Text.EndsWith([Attribute], "Cost") then "Cost" else "Quantity"

Я также отрубил кусок " Cost" в конце столбца Attribute.Вы можете либо Преобразовать> Заменить значения и заменить " Cost" ничем, либо Преобразовать> Извлечь> Текст перед разделителем " Cost".

Custom Column

Теперь повернитенастраиваемый столбец (выберите столбец Value в качестве столбца значений) и, наконец, переименуйте столбец Attribute в Product Name.

Pivoted


Вот мой М-код для всех шагов:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcknNK0stUnAuLS7Jz00tUtJRMjIGEoYmIJapqZ6pAYhnZKpnYKAUqxOt5JyRmZyYno+swdAQSJiagtUZgNQBeeYQDbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, #"Product Orange T-shirt" = _t, #"Product Blue T-shirt" = _t, #"Product Orange T-shirt Cost" = _t, #"Product Blue T-shirt Cost" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer", type text}, {"Product Orange T-shirt", Int64.Type}, {"Product Blue T-shirt", Int64.Type}, {"Product Orange T-shirt Cost", type number}, {"Product Blue T-shirt Cost", type number}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Customer"}, "Attribute", "Value"),
    #"Added Custom" = Table.AddColumn(#"Unpivoted Columns", "Custom", each if Text.EndsWith([Attribute], "Cost") then "Cost" else "Quantity"),
    #"Replaced Value" = Table.ReplaceValue(#"Added Custom"," Cost","",Replacer.ReplaceText,{"Attribute"}),
    #"Pivoted Column" = Table.Pivot(#"Replaced Value", List.Distinct(#"Replaced Value"[Custom]), "Custom", "Value", List.Sum),
    #"Renamed Columns" = Table.RenameColumns(#"Pivoted Column",{{"Attribute", "Product Name"}})
in
    #"Renamed Columns"
0 голосов
/ 24 июня 2018

Вот A way ...

Начиная с этой таблицы как Таблица1:

enter image description here

Вы можете выбрать столбец «Клиент» и «Отключить другие столбцы», чтобы получить это:

enter image description here

Затем вы можете добавить столбец индекса (оставьте его с именем Index), а затем также пользовательский столбец (оставьте его с именем Custom) с if Text.EndsWith([Attribute],"Cost") then 1 else 0 в качестве формулы, чтобы получить это:

enter image description here

Затем добавьте еще один пользовательский столбец ... Назовите его Total Cost и введите #"Unpivoted Other Columns"[Value]{[Index]+(List.Count(#"Added Custom"[Custom])/List.Sum(#"Added Custom"[Custom]))} в качестве формулы, чтобы получить:

enter image description here

Двумя шагами выше было, во-первых, настроить поиск соответствующей стоимости футболок на основе позиции стоимости в столбце «Значение», а затем фактически определить стоимость и записать ее в той же строке, что и соответствующая строка. Tshirts. Столбец «Индекс» предоставляет информацию о расположении строк, в то время как столбец «Пользовательский» предоставляет информацию о количестве - как общее количество в списке, так и количество строк со стоимостью. Я использую информацию счетчика, чтобы определить, сколько позиций индекса нужно переместить вниз по столбцу Значение для динамического получения связанных значений затрат.

Затем выполните фильтрацию в столбце Атрибут, используя Текстовые фильтры> Не заканчивается ... и введите слово Стоимость. Все строки с записью атрибута, заканчивающейся словом Cost, должны исчезнуть:

enter image description here

Удалите столбцы «Индекс» и «Пользовательский» и переименуйте столбцы «Атрибут» и «Значение» в «Имя продукта» и «Количество» соответственно, чтобы получить окончательный результат:

enter image description here

Вот мой код М:

let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Customer"}, "Attribute", "Value"),
#"Added Index" = Table.AddIndexColumn(#"Unpivoted Other Columns", "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each if Text.EndsWith([Attribute],"Cost") then 1 else 0),
#"Added Custom2" = Table.AddColumn(#"Added Custom", "Total Cost", each #"Unpivoted Other Columns"[Value]{[Index]+(List.Count(#"Added Custom"[Custom])/List.Sum(#"Added Custom"[Custom]))}),
#"Filtered Rows" = Table.SelectRows(#"Added Custom2", each not Text.EndsWith([Attribute], "Cost")),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Index", "Custom"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Attribute", "Product Name"}, {"Value", "Quantity"}})
in
#"Renamed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...