Spotfire中按类型计算同比差值及预算与实际值差值
Spotfire 计算列实现需求方案
1. 按Type分组计算当年与上年同类型差值
针对每个Value列(例如[Value1]),创建计算列时使用以下公式:
[Value1] - Sum([Value1]) OVER (Partition By [Type] Order By [Year] Rows Between 1 Preceding And 1 Preceding)
- 逻辑说明:
Partition By [Type]限定仅在同类型分组内计算,Order By [Year]按年份排序,Rows Between 1 Preceding And 1 Preceding精准定位上年的同类型数据,用当前值减去上年值得到差值。 - 可选优化(处理无上年数据的第一年):
If(Count([Year]) OVER (Partition By [Type] Order By [Year]) > 1, [Value1] - Sum([Value1]) OVER (Partition By [Type] Order By [Year] Rows Between 1 Preceding And 1 Preceding), NULL)
2. 每年Actual行显示Budget与Actual的差值
针对每个Value列(例如[Value1]),创建计算列时使用以下公式:
If([Type] = "Actual", Sum([Value1]) OVER (Partition By [Year]) - [Value1], NULL)
- 逻辑说明:
Partition By [Year]获取当年所有Type的Value总和,减去当前Actual行的Value,即可得到当年Budget与Actual的差值(因当年仅包含Budget和Actual两行,总和减Actual即为Budget值,再减Actual就是两者差值)。Budget行返回NULL,若需要可改为0。 - 更直观的写法(确保每年每个Type仅一行数据时适用):
If([Type] = "Actual", (Sum([Value1]) OVER (Partition By [Year] Having [Type] = "Budget")) - [Value1], NULL)
多Value列批量处理技巧
如果存在多个Value列,无需手动逐个编写公式:
- 先创建第一个计算列,右键复制该列后,仅修改公式中的列名(如把
[Value1]替换为[Value2]),即可快速生成其他列的计算逻辑。
内容的提问来源于stack exchange,提问作者Phic
相关产品推荐
相关产品推荐

