显示基于另一列值的聚合值
Showing an aggregated value based on the value of another column
我有以下table结构
| ID | Date | Value | IsForecast
| 1 | 1/1/2017 | 0 | 1
| 2 | 1/5/2017 | | 0
| 3 | 1/9/2017 | | 0
| 4 | 2/1/2017 | 0 | 1
| 5 | 2/5/2017 | 0 | 0
| 6 | 2/8/2017 | | 0
| 7 | 2/9/2017 | | 0
| 8 | 3/1/2017 | 0 | 1
请注意,日期列实际上是一个数值,用于关闭日历 table。
我想基本上创建一个显示按月分组的 "Value" 的视图,但如果有实际值 (IsForecast = 0),则使用该值的总计,否则使用总计如果 IsForecast = 1.
我希望从上面的数据中得到的结果是这样的:
| Month | Value
| Jan | (Sum of IsForecast = 0)
| Feb | 0 (Sum of IsForecast = 0)
| Mar | 0 (Sum of IsForecast = 1, because there are no values where IsForecast = 0)
本质上这是一个事实 table,日期键关闭到时间维度,IsForecast 键关闭到实用程序维度以过滤实际销售和预测。
我需要显示在单个列中显示销售和预测的聚合,但是如果有实际销售价值则使用它,如果没有则使用预测。
我尝试在 MDX 中执行此操作 IIF((Measures.Value, [SalesMode].[Actual]) <> NULL, (Measures.Value, [SalesMode].[Actual]), (Measures.Value, [SalesMode].[Forecast]))
但这对总计来说太麻烦了,因为“销售额+预测”列的总计始终显示总销售额,而不是总销售额+预测。如果有人有 MDX 建议,请随意,但我正在回顾在 SQL 视图中执行此操作,并将其作为一种衡量标准。
您可以在按月分组的查询中使用类似这样的方法:
如果一个月内的所有行的 isforecast=1,它将对所有值求和。否则,它仅对 isforecast=0.
的值求和
case when min(isforecast) = 1 then sum(value)
else sum(case when isforecast = 0 then value else 0 end)
end
我有以下table结构
| ID | Date | Value | IsForecast
| 1 | 1/1/2017 | 0 | 1
| 2 | 1/5/2017 | | 0
| 3 | 1/9/2017 | | 0
| 4 | 2/1/2017 | 0 | 1
| 5 | 2/5/2017 | 0 | 0
| 6 | 2/8/2017 | | 0
| 7 | 2/9/2017 | | 0
| 8 | 3/1/2017 | 0 | 1
请注意,日期列实际上是一个数值,用于关闭日历 table。
我想基本上创建一个显示按月分组的 "Value" 的视图,但如果有实际值 (IsForecast = 0),则使用该值的总计,否则使用总计如果 IsForecast = 1.
我希望从上面的数据中得到的结果是这样的:
| Month | Value
| Jan | (Sum of IsForecast = 0)
| Feb | 0 (Sum of IsForecast = 0)
| Mar | 0 (Sum of IsForecast = 1, because there are no values where IsForecast = 0)
本质上这是一个事实 table,日期键关闭到时间维度,IsForecast 键关闭到实用程序维度以过滤实际销售和预测。
我需要显示在单个列中显示销售和预测的聚合,但是如果有实际销售价值则使用它,如果没有则使用预测。
我尝试在 MDX 中执行此操作 IIF((Measures.Value, [SalesMode].[Actual]) <> NULL, (Measures.Value, [SalesMode].[Actual]), (Measures.Value, [SalesMode].[Forecast]))
但这对总计来说太麻烦了,因为“销售额+预测”列的总计始终显示总销售额,而不是总销售额+预测。如果有人有 MDX 建议,请随意,但我正在回顾在 SQL 视图中执行此操作,并将其作为一种衡量标准。
您可以在按月分组的查询中使用类似这样的方法:
如果一个月内的所有行的 isforecast=1,它将对所有值求和。否则,它仅对 isforecast=0.
的值求和 case when min(isforecast) = 1 then sum(value)
else sum(case when isforecast = 0 then value else 0 end)
end