我有一个交叉表,按月和年汇总平均值。剩下的唯一组件是计算两个agg之间的价差。功能列。用户可以选择他们要查看其价差的两个节点。用户还可以选择年份。
代码如下:
PARAMETERS [Node 1] Long, [Node 2] Long, [Year] Long;
TRANSFORM Format(Avg([Monthly values].[total_lmp_on]),"Fixed") AS AVG_ON_LMP
SELECT [Monthly values].Month, [Monthly values].Year
FROM [Monthly values]
WHERE ((([Monthly values].pnode_id)=[Node 1] Or ([Monthly values].pnode_id)=[Node 2])AND [Monthly values].Year = [Year])
GROUP BY [Monthly values].Month, [Monthly values].Year
PIVOT [Monthly values].pnode_id;
提示用户节点1,节点2和年份。可以说:
- 节点1:12345
- 节点2:6789
- 年份:2017
将显示以下内容:
月份----------------年份----------- 12345 -------------- 6789
2017年1月------------------- 10 --------------- --20
2017年2月----------------- 15 -------------- --15
2017年3月----------------- 5 ---------------- -0
2017年4月----------------------------- 20 --------------- --10
如何添加一列,以使我能在两个选定节点之间分布?看起来像这样:
月份----------------年份----------- 12345 -------------- 6789 ---- ---------传播
2017年1月------------------- 10 --------------- --20 ----------------(-10)
2017年2月----------------- 15 -------------- --15 -----------------(0)
2017年3月----------------- 5 ---------------- -0 ------------------(5)
2017年4月----------------------------- 20 --------------- --10 ---------------(10)
我相当确定这是不可能的,但是我想用尽所有资源。或者,如果还有其他选择。
答案 0 :(得分:0)
考虑使用AVG(IIF(...))
进行条件聚合,以找到相应节点平均值的差。请注意: Spread 列将出现在枢轴列的右侧。
PARAMETERS [Node 1] Long, [Node 2] Long, [Year] Long;
TRANSFORM Format(AVG(m.[total_lmp_on]), "Fixed") AS AVG_ON_LMP
SELECT m.Month, m.Year,
AVG(IIF(m.pnode_id = [Node1], m.[total_lmp_on], NULL)) -
AVG(IIF(m.pnode_id = [Node2], m.[total_lmp_on], NULL)) AS Spread
FROM [Monthly values] m
WHERE (m.pnode_id) IN ([Node 1], [Node 2]) AND (m.Year = [Year])
GROUP BY m.Month, m.Year
PIVOT m.pnode_id;