Разница по сравнению с предыдущим 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
для пользовательской формулы?