Объединить столбцы запроса мощности, которые смещены относительно друг друга - PullRequest
0 голосов
/ 26 февраля 2019
Проблема

У меня есть набор данных с двумя строками заголовка.Я переместил строки в столбцы для работы с заголовками перед объединением, но мне нужна помощь с конкатенацией column1 в column2, так как после 7-й строки столбцы смещены один на другой (см. Пример изображения).

Цель

Я пытался использовать замену и сцеплять себя с индексом, но не смог достичь желаемого конечного результата, где column2 row 8объединены с column1 row 7, так что когда я объединю эти столбцы и снова транспонирую, заголовки будут правильно помечены (см. пример изображения).

Спасибо за любые предложения и ваше время.

Примеризображение:

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Другой способ.

Код:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    IndexedTable = Table.AddIndexColumn(Source, "Index", 0, 1),
    Transform = Table.TransformRows(IndexedTable, (row)=>[Column1= row[Column1], Column2 = if row[Column1]=null then Text.Combine({IndexedTable{row[Index]-1}[Column1], "-",row[Column2]}) else row[Column2]]),
    ToTable = Table.FromRecords(Transform)
in
    ToTable

Краткое объяснение:

  1. Источник
  2. Добавление индекса к предыдущей записи
  3. Используйте Table.TransformRows для анализа и преобразования каждой строки в запись следующим образом: Column1 берется из каждой строки column1 (row[Column1]), Column2 генерируется из предыдущей строки с использованием Text.Concatenate, IndexedTable{row[Index]-1}[Column1].Это дает значение из предыдущего столбца Column1.Table.TransformRows возвращает список записей.
  4. Преобразует список записей в таблицу.

Этот код не будет работать, если 1-я строка содержит ноль в [Column1].Если это недопустимо, добавьте еще if-then-else.

0 голосов
/ 27 февраля 2019

Другой способ:

let
    Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
    fillDown = Table.FillDown(Table.DuplicateColumn(Source, "Column1", "copy"),{"copy"}),
    replace = Table.ReplaceValue(fillDown, each [Column2], each if [Column2] = null then null
              else [copy]&"-"&[Column2], Replacer.ReplaceValue, {"Column2"})[[Column1],[Column2]]
in
    replace
0 голосов
/ 27 февраля 2019

Вот один способ.

Я начинаю с вашей таблицы задач как таблицы с именем Table1:

enter image description here

Затем я добавляю индекс.(Добавить столбец> Индексный столбец):

enter image description here

Затем я добавляю пользовательский столбец.(Добавить столбец> Пользовательский столбец) При такой настройке:

enter image description here

(#"Added Index"{[Index]-1}[Column1] ссылается на запись в Column1 в строке записи позиции, котораяравно значению в столбце индекса, минус 1.)

... чтобы получить это:

enter image description here

Тогда я заменил Ошибки в новом столбце Custom.(Щелкните правой кнопкой мыши заголовок пользовательского столбца> щелкните Заменить Ошибки> введите null> нажмите ОК)

enter image description here

Затем я выбираю Столбец1 иПользовательский столбец и удалить другие столбцы.(Выберите заголовок столбца 1> удерживайте Ctrl и нажмите «Пользовательский заголовок столбца»> удерживайте нажатой клавишу «Ctrl» и щелкните правой кнопкой мыши заголовок пользовательского столбца> нажмите «Удалить другие столбцы»)

enter image description here

Вот мой код М:

let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each #"Added Index"{[Index]-1}[Column1]&"-"&[Column2]),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Added Custom", {{"Custom", null}}),
#"Removed Other Columns" = Table.SelectColumns(#"Replaced Errors",{"Column1", "Custom"})
in
#"Removed Other Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...