Как я могу преобразовать таблицу в новые строки и объединить несколько столбцов в один?

#excel #powerbi

#excel #powerbi

Вопрос:

Я застрял на этом некоторое время, я знаю, как создавать строки со столбцами, но не как создать комбинацию из нескольких в один. =) Это данные

 Id  M1  M1Comments  M2  M2Comments  M3  M3Comments
1   Yes "Blabla"    Yes "Blabla"    No  "Blabla"
2   Yes "Blabla"    No  "Blabla"    No  "Blabla"
3   No  "Blabla"    No  "Blabla"    No  "Blabla"
 

И конечный результат должен выглядеть так

 Id  M   Value   Comments
1   M1  Yes "Blabla"
1   M2  Yes "Blabla"
1   M2  No  "Blabla"
2   M1  Yes "Blabla"
2   M2  No  "Blabla"
2   M3  No  "Blabla"
3   M1  No  "Blabla"
3   M2  No  "Blabla"
3   M3  No  "Blabla"
 

Комментарии:

1. Из ваших исходных 7 столбцов вы можете создать новую строку со столбцами 1; «M1»; 2; 4 («M1» — фиксированный текст!) и 2; «M2»; 4; 5 и 3; «M3»; 6; 7 Результатом должен быть ваш вывод. (это может потребовать только сортировки)

2. Вы можете сделать это в Power Query Editor, используя опцию Unpivot.

Ответ №1:

  1. Отключите все, кроме Id .
  2. Разделите столбец атрибутов.
  3. Поверните второй столбец из разделения.
  4. Переименуйте столбцы по желанию.
 let
    Source = < Your Data Soucre Here >,
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Id"}, "Attribute", "Value"),
    #"Split Column by Position" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByPositions({0, 2}, false), {"M", "Comment"}),
    #"Pivoted Column" = Table.Pivot(#"Split Column by Position", List.Distinct(#"Split Column by Position"[Comment]), "Comment", "Value"),
    #"Renamed Columns" = Table.RenameColumns(#"Pivoted Column",{{"", "Value"}})
in
    #"Renamed Columns"
 

Комментарии:

1. Я попытался выполнить 4 шага. 1. Легко 2. Разделите столбец на позицию 0,2… В результате заголовки (Id, Attrebute, Value), такие как Id 1, становятся 6 строками. Строка 1 1, M1, Yes и строка 2 1, M1Comments, «Blablabla». Я отмечаю столбец атрибутов и нажимаю разделить «по количеству символов», затем ввожу 2 и нажимаю один раз как можно дальше влево. Это создает новый столбец с именем Attrubute2, каждый другой теперь пуст, а другой говорит комментарии. Теперь я стою на месте

2. Сведите столбец Attribute2 со значением в качестве столбца значений (выберите не агрегировать из дополнительных параметров).

Ответ №2:

Вы можете попробовать приведенный ниже предварительный редактор кода для таблицы для достижения желаемого результата-

 let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUYpMLQaSyfm5ual5JQqGCrlYBY2AXL98VDFjpVidaCUjDOVGEDNQlBthMcIIZoQxuowxFhOMsZhgDDYhFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Id = _t, M1 = _t, M1Comments = _t, M2 = _t, M2Comments = _t, M3 = _t, M3Comments = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Id", Int64.Type}, {"M1", type text}, {"M1Comments", type text}, {"M2", type text}, {"M2Comments", type text}, {"M3", type text}, {"M3Comments", type text}}),
    
    // New steps started from here
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Id"}, "Attribute", "Value"),
    #"Added Custom" = Table.AddColumn(#"Unpivoted Columns", "Custom", each if Text.End([Attribute],8) = "Comments" then [Value] else null),
    #"Filled Up" = Table.FillUp(#"Added Custom",{"Custom"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Up", each not Text.Contains([Attribute], "Comments")),
    #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{"Attribute", "M"}, {"Custom", "Comments"}})
in
    #"Renamed Columns"
 

Ввод-

введите описание изображения здесь

Вывод-

введите описание изображения здесь

Комментарии к условию имя столбца должно содержать текстовые комментарии

Комментарии:

1. Привет, я рад за код, но чтобы иметь возможность применять это в большем количестве проектов, мне нужно больше пошаговых или изображений

2. Это должно работать для большего количества столбцов, когда имя столбца комментариев соответствует указанному выше формату именования.