Azure Data Factory库存累计值(Running value)计算失败问题排查
解决ADF Window Transformation计算累计库存值的问题
问题根源
你用lag(CurrSum,1)的方式行不通,原因有两个:
CurrSum是你正在窗口转换中生成的计算列,lag函数只能引用原始数据源中的列,无法获取同一窗口里刚计算出来的前一行CurrSum值。lag属于偏移类窗口函数,本身不需要指定Range by的offset参数,强行设置就会触发Cannot specify window frame for lag function错误。
正确实现方案
你的累计逻辑CurrSum = 上一条记录的CurrSum + SalesQty + PurchQty,本质就是按ItemNo分区、按EndDate排序后,从第一行到当前行的SalesQty + PurchQty累计和(初始值为0)。直接用sum窗口函数就能实现,步骤如下:
- 在ADF的Window Transformation中:
- Partition by:选择
ItemNo(按商品分区计算) - Order by:选择
EndDate并设置为升序(确保按时间顺序累计) - Range/Row settings:设置为
rows between unbounded preceding and current row(指定窗口范围是分区内从第一行到当前行)
- Partition by:选择
- 窗口列的表达式写:
sum(SalesQty + PurchQty) over (partition by ItemNo order by EndDate rows between unbounded preceding and current row) - 如果有初始库存(比如某商品初始库存不是0),直接在表达式开头加上初始值即可,例如:
InitialStock + sum(SalesQty + PurchQty) over (partition by ItemNo order by EndDate rows between unbounded preceding and current row)
验证逻辑
- 第一条记录:累计和就是当前行的
SalesQty + PurchQty,等价于0 + SalesQty + PurchQty,符合你的逻辑。 - 第二条记录:累计和是第一条的
Sales+Purch加上当前行的Sales+Purch,等价于上一条CurrSum + 当前Sales+Purch,完全匹配需求。
内容的提问来源于stack exchange,提问作者KMadsen
相关产品推荐
相关产品推荐

