我有一个数据集,其中包含 Spotfire 表中几年的各种数量,但是在列中定义了一些行作为预算或实际,如下例表(但实际上我有多个不同的值列):
年份 | 价值 | 类型 |
---|---|---|
2022 | 1000 | 预算 |
2022 | 900 | 实际 |
2023 | 1200 | 预算 |
2023 | 950 | 实际 |
2024 | 1400 | 预算 |
2025 | 1600 | 预算 |
对于每个值列,我想创建两个计算列。
第一个将显示每种价值类型与上一年相比的价值金额之间的差异,即比较 2023 年和 2022 年,预算增加了 200(即 2023 年预算的 1200 减去 2022 年预算的 1000),实际价值增加了 50(即 2023 年实际值 950 减去 2022 年实际值 900)。
第二个将显示每年预算和实际金额之间的差异,即在 2022 年,2022 年实际值行中的期望结果将为 -100(即 2022 年实际值 900 小于预算值 1000)
我相信我需要在计算列中使用 OVER 和 PREVIOUS 函数,但我尝试过的语句并没有像我希望的那样工作:
Sum(值])-Sum([值]) OVER 相交 ([类型],上一个([年份]))
目前我的数据集相当小,因此我可以使用简单的 Excel 函数在原始数据中设置这些数据,但希望在 Spotfire 计算列中定义它,这样随着数据集的增长,它不需要维护。
经过多一点阅读和一些尝试和错误后,我成功了。 在这里发布我的解决方案,以便将来有人发现这个问题。
对于第一种情况,我使用:
[值] - First([值]) OVER (相交(上一个([年份]),[类型]))
获取每一行的值,并扣除上一年和相同类型的行的第一个值(在我的例子中,每年只有一行)。
对于第二种情况: [值] - First([值]) OVER (相交(下一个([类型]),[年份]))
这将获取该值,并从同一年的下一个类型中扣除第一个值(如上所述,仅一行)(即预算按字母顺序排列在“实际”之后,如果相反,则可以使用“上一个”)。