我有以下表结构
| ID | Date | Value | IsForecast
| 1 | 1/1/2017 | $100 | 1
| 2 | 1/5/2017 | $50 | 0
| 3 | 1/9/2017 | $30 | 0
| 4 | 2/1/2017 | $200 | 1
| 5 | 2/5/2017 | $120 | 0
| 6 | 2/8/2017 | $30 | 0
| 7 | 2/9/2017 | $60 | 0
| 8 | 3/1/2017 | $200 | 1
注意Date列实际上是一个键入Calendar表的数值。
我想基本上创建一个显示按月分组的“值”的视图,但如果有实际值(IsForecast = 0),则使用该值的总和,否则使用总数,如果IsForecast = 1
我从上面的数据中得到的结果是这样的:
| Month | Value
| Jan | $80 (Sum of IsForecast = 0)
| Feb | $210 (Sum of IsForecast = 0)
| Mar | $200 (Sum of IsForecast = 1, because there are no values where IsForecast = 0)
本质上,这是一个Fact表,而Date键关闭到Time维度,IsForecast键切换到实用程序维度以过滤实际销售和预测。
我需要显示在单个列中显示销售和预测的聚合,但是如果有实际销售值使用该列,并且如果不使用预测。
我试图在MDX IIF((Measures.Value, [SalesMode].[Actual]) <> NULL, (Measures.Value, [SalesMode].[Actual]), (Measures.Value, [SalesMode].[Forecast]))
中执行此操作,但这与Grand Totals一起玩,因为Sales + Forecasts列的总数始终显示总销售额,而不是销售总额+预测。如果有人有MDX建议然后感到自由,但我回过头来在SQL视图中执行此操作,并将其作为衡量标准。
答案 0 :(得分:2)
您可以在按月分组的查询中使用类似的内容执行此操作:
如果一个月内的所有行都具有isforecast = 1,则它会将所有值相加。否则,它仅对isforecast = 0的值求和。
case when min(isforecast) = 1 then sum(value)
else sum(case when isforecast = 0 then value else 0 end)
end