我想在Power Query WeekNum [当前行]中计算Delta Weeks列 - WeekNum [上一行]
我找到了一种使用[Index]列的方法,但是速度很慢,我的表格是100k行。
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中执行此操作)。
答案 0 :(得分:1)
我认为PQ不是为处理上一行上下文而设计的。
我找到的东西比使用[Index] -1引用前一行更好,正在创建2个索引列(一个以:0,1,2开头,另一个以0,0,1,2开头,所以基本上[索引] -1被置于0),然后加入2个表,基本上将前一行放在同一行,如果这是有道理的。
然而,即便这对我来说太慢了,最后我实现了一种不同的方法,我只是使用一些VBA代码,我通过前一行计算差异,然后在PQ中导入表。我认为这是一种更有效(也更快)的方法!
答案 1 :(得分:0)
尝试/否则可能会很慢。如果您使用if [Index] > 0 then Source[WeekNumber]{[Index]} - Source[WeekNumber]{[Index] - 1} else 0
作为自定义公式,会更快吗?
答案 2 :(得分:0)
而不是你的尝试...否则代码我会使用更直接的东西:
[WeekNumber] - #"Added Index"[WeekNumber]{[Index] - 1}
。
然后我会添加一个Replace Errors步骤来清理第一行。