Когда я провожу семинар по Power Excel в режиме реального времени, я предлагаю, чтобы, если у кого-нибудь в комнате когда-нибудь возникнет странная проблема с Excel, они могут отправить ее мне за помощью. Вот так я и получил эту проблему с очисткой данных. У кого-то был итоговый лист, который выглядит так:
Они хотели переформатировать данные, чтобы они выглядели так:
Один интересный ключ к этим данным: 18 в G4, по-видимому, являются промежуточным итогом H4: K4. Заманчиво удалить столбцы G, L и так далее, но сначала вы должны извлечь имя сотрудника из G3, L3 и так далее.
Было 4 утра в воскресенье 9 февраля, когда я включил видеомагнитофон и записал в Power Query несколько неуклюжих шагов для решения проблемы. Учитывая, что это было воскресенье, день, когда я обычно не снимаю видео, я попросил людей присылать свои идеи о том, как решить проблему. Отправлено 29 решений.
Каждое решение предлагает новые крутые улучшения по сравнению с моим процессом. Я планирую начать серию статей, в которых будут показаны различные улучшения моего метода.
Смотреть видео
Прежде чем я начну этот процесс, я приглашаю вас увидеть мое решение:
И M-код, который для меня сгенерировал Power Query:
let Source = Excel.CurrentWorkbook()((Name="UglyData"))(Content), #"Promoted Headers" = Table.PromoteHeaders(Source, (PromoteAllScalars=true)), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",(("Category Description", type text), ("Dept. Total", type number), ("Q1", type number), ("Q2", type number), ("Q3", type number), ("Q4", Int64.Type), ("Employee 1", type number), ("Q1_1", type number), ("Q2_2", type number), ("Q3_3", Int64.Type), ("Q4_4", Int64.Type), ("Employee 2", Int64.Type), ("Q1_5", Int64.Type), ("Q2_6", Int64.Type), ("Q3_7", Int64.Type), ("Q4_8", Int64.Type), ("Employee 3", Int64.Type), ("Q1_9", Int64.Type), ("Q2_10", Int64.Type), ("Q3_11", Int64.Type), ("Q4_12", Int64.Type), ("Employee 4", type number), ("Q1_13", type number), ("Q2_14", type number), ("Q3_15", type number), ("Q4_16", Int64.Type))), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", ("Category Description"), "Attribute", "Value"), #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByEachDelimiter(("_"), QuoteStyle.Csv, false), ("Attribute.1", "Attribute.2")), #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",(("Attribute.1", type text), ("Attribute.2", Int64.Type))), #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",("Attribute.2")), #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",(("Attribute.1", "TextValue"))), #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Length", each Text.Length((TextValue))), #"Added Conditional Column" = Table.AddColumn(#"Added Custom", "Name", each if (Length)> 2 then (TextValue) else null), #"Filled Down" = Table.FillDown(#"Added Conditional Column",("Name")), #"Reordered Columns" = Table.ReorderColumns(#"Filled Down",("Category Description", "Name", "TextValue", "Value", "Length")), #"Filtered Rows" = Table.SelectRows(#"Reordered Columns", each ((TextValue) = "Q1" or (TextValue) = "Q2" or (TextValue) = "Q3" or (TextValue) = "Q4")), #"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each (Name) "Dept. Total"), #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",("Length")), #"Pivoted Column" = Table.Pivot(#"Removed Columns1", List.Distinct(#"Removed Columns1"(TextValue)), "TextValue", "Value", List.Sum), #"Sorted Rows" = Table.Sort(#"Pivoted Column",(("Name", Order.Ascending))), #"Added Custom1" = Table.AddColumn(#"Sorted Rows", "Total", each (Q1)+(Q2)+(Q3)+(Q4)) in #"Added Custom1"
Прежде чем мы перейдем к решениям, давайте рассмотрим множество общих комментариев:
- Некоторые из вас сказали, что для начала нужно вернуться назад, чтобы выяснить, почему данные отображаются в этом формате. Я ценю эти комментарии. Все, кто сказал это, лучше меня. С годами я узнал, что, когда вы спрашиваете «Почему?» Ответ обычно касается этого бывшего сотрудника, который пошел по этому пути 17 лет назад, и все продолжают использовать его таким образом, поскольку все мы к этому уже привыкли.
- Также - многие из вас - сказали, что окончательным решением должна быть высокая вертикальная таблица, а затем использование сводной таблицы для получения окончательных результатов. Джонатан Купер резюмировал это лучше всего: «Я также согласен с некоторыми другими комментариями YouTube о том, что в правильном наборе данных не было бы« Итоговых значений »и его не нужно было бы изменять в конце. Но если пользователю действительно нужен простой старый стол, то вы даете им то, что они хотят ". Я действительно вижу обе стороны этого. Мне нравятся сводные таблицы, и единственное, что интереснее Power Query, - это Power Query с красивой сводной таблицей наверху. Но если мы сможем сделать все это в Power Query, то на одну вещь меньше.
Вот гиперссылки на различные методы
-
Методы Power Query
- Нумерация групп записей
- Извлечение двух левых символов
- Итоговый столбец
- Else if Clauses
- Несколько одинаковых заголовков в Power Query
- Что удалить
- Разделить на Q
- Сортировка позиций
- Решения Power Query от Excel MVP
-
Выход за рамки интерфейса Power Query
- Таблица.Split
- Мир Билла Шиша
-
Формула Решения
- Формула одного динамического массива
- Колонны Old School Helper
- Формула Решения
-
Сочетание всех идей сверху и финального видео
- Сочетание лучших идей из всех