显示基于另一列值的聚合值

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