Разница по сравнению с предыдущим Row & DistinctCount

Я хочу вычислить столбец Delta Weeks в Power Query WeekNum[текущая строка] - WeekNum[предыдущая строка]

Я нашел способ сделать это, используя столбец [Index], но он мучительно медленный, и моя таблица содержит 100 тысяч строк.

let
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer", type text}, {"Product", type text}, {"WeekNum", Int64.Type}}),

#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Delta Weeks", each try Source[WeekNum]{[Index]} - Source[WeekNum]{[Index]-1} otherwise 0) in #"Added Custom"

Кроме того, после этого мне нужен еще один столбец, который будет подсчитывать различные значения от начала до этой строки.

Большинство недель являются последовательными, поэтому, в основном, отчетливое число будет увеличиваться, если это не так.

(Я не знаю, как это сделать в Power Query).

3 ответа

Я считаю, что PQ не был разработан для работы с предыдущим контекстом строки.

То, что я нашел, работает лучше, чем ссылка на предыдущую строку с помощью [Index]-1, это создание 2 столбцов индекса (один начинается с: 0,1,2, а другой с 0,0,1,2, так что в основном это [ Индекс] -1 имеет значение 0), а затем объединяет 2 таблицы, что, в основном, ставит предыдущую строку в ту же строку, если это имеет смысл.

Однако даже это было слишком медленно для меня, и в итоге я реализовал другой подход, и я просто использую немного кода VBA, где я вычисляю разницу по предыдущей строке, а затем импортирую таблицу в PQ. Я думаю, что это более эффективный (и значительно более быстрый) подход!

Вместо вашей попытки... в противном случае я бы использовал что-то более прямое, например:

[WeekNumber] - #"Added Index"[WeekNumber]{[Index] - 1},

Затем я бы добавил шаг Replace Errors для очистки первого ряда.

Попытаться / иначе может быть довольно медленным. Это быстрее, если вы используете if [Index] > 0 then Source[WeekNumber]{[Index]} - Source[WeekNumber]{[Index] - 1} else 0 для пользовательской формулы?

Другие вопросы по тегам