向交叉表添加额外的表达式列 - 这可能吗?
Add additional expression column to cross-tab - Is this possible?
我有一个交叉表,按月和年汇总值作为平均值。剩下的唯一组成部分是计算两个 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 和年份。让我们说:
- Node 1: 12345
- Node 2: 6789
- Year: 2017
以下将显示:
月------------年------------12345------------6789
一月----------------2017------------10------------ ----20
二月----------------2017------------15------------ ----15
三月----------------2017------------5------------ ---0
4月----------------2017年------------20------------ ----10
问题
如何添加一个列来给出两个选定节点之间的分布?看起来像:
月------------年------------12345------------6789-- ----------传播
一月----------------2017------------10------------ ----20----------------(-10)
二月----------------2017------------15------------ ----15----------------(0)
三月----------------2017------------5------------ ---0--------------------(5)
4月----------------2017年------------20------------ ----10----------------(10)
我相当确定这是不可能的,但我想用尽所有资源。或者如果还有其他选择。
考虑使用 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;
我有一个交叉表,按月和年汇总值作为平均值。剩下的唯一组成部分是计算两个 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 和年份。让我们说:
- Node 1: 12345
- Node 2: 6789
- Year: 2017
以下将显示:
月------------年------------12345------------6789
一月----------------2017------------10------------ ----20
二月----------------2017------------15------------ ----15
三月----------------2017------------5------------ ---0
4月----------------2017年------------20------------ ----10
问题
如何添加一个列来给出两个选定节点之间的分布?看起来像:
月------------年------------12345------------6789-- ----------传播
一月----------------2017------------10------------ ----20----------------(-10)
二月----------------2017------------15------------ ----15----------------(0)
三月----------------2017------------5------------ ---0--------------------(5)
4月----------------2017年------------20------------ ----10----------------(10)
我相当确定这是不可能的,但我想用尽所有资源。或者如果还有其他选择。
考虑使用 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;