Powerpivot - 确定用户输入日期随时间变化的程度

Powerpivot - Determine how much a user-input date changes over time

我有一个 table 有几个案例的一系列月度测量值。每个案例的衡量标准之一是分析师预测该案例将结束的日期(预测日期)。

在第 1 个月,分析师可能认为案件将于 2015 年 6 月 30 日结案。但在第 2 个月,该分析师可能会修改估计并说案件将于 8 月 15 日结案。

我想要做的是创建一个计算列,告诉我上个月的预测日期和本月的预测日期之间的差异。

假设第 1 个月是 2015 年 1 月,我想要的是差异列:

CaseNum | MeasureMonth | ForecastDate | DiffFromPrevMeasure 
case1   | 2015/01/31   | 2015/06/30   |-- (there is no previous date)
case1   | 2015/02/28   | 2015/08/15   | 46
case1   | 2015/03/31   | 2015/08/01   | -14

等等。 table中显然有很多案例。

我需要做一些事情,比如检查变化的分布,显示在特定日期前后 +/- 的变化百分比,等等。所以我不能通过措施来做到这一点。

我想我需要用 CALCULATE / MAX / EARLIER 减去当前行的日期来做一些事情,但我就是做不到。

我使用 Excel 2010,而不是 2013,如果这对解决方案很重要的话。

这是在 SQL 中非常简单但在 DAX 中非常棘手的方法之一。

=
 CALCULATE (
   AVERAGE ( [ForecastDate] ),
   TOPN (
    1,
    FILTER (
            myTable,
            [CaseNum] = EARLIER ( [CaseNum] )
            && [MeasureMonth] < EARLIER ( [MeasureMonth] )
            ),
    [MeasureMonth]
)) - [ForecastDate]

TOPN 取您提供的 table 的第 n 个值,这里的技巧是可以过滤 table。我为顶行指定一个值,然后使用 FILTER() 传递一个 table,这是 caseNum 的所有记录,日期早于该记录中的记录(它的 < 不是 EARLIER() ).然后我使用 [MeasureMonth] 作为参数对 table 进行排序并扣除预测日期以获得更改。

使用此度量,每个记录的第一条记录都会给您一个疯狂的数字,解决此问题的一种方法是引入一个 IF() 来检查 CALCULATE 是否为 BLANK()。

希望这是有道理的。

相同但不同...

创建一个新的计算列 (PreviousMeasureMonth) 来存储上个月的测量日期:

=
CALCULATE (
    MAX ( myTable[MeasureMonth] ),
    FILTER (
        ALL ( myTable ),
        myTable[MeasureMonth] < EARLIER ( myTable[MeasureMonth] )
            && myTable[casenum] = EARLIER ( myTable[CaseNum] )
    )

添加另一个计算列 (PreviousForecastDate) 以提取上一个计算的度量月份的预测日期:

=
CALCULATE (
    MAX ( myTable[ForecastDate] ),
    FILTER (
        ALL ( myTable ),
        myTable[MeasureMonth] = EARLIER ( [PreviousMeasureMonth] )
            && myTable[CaseNum] = EARLIER ( myTable[CaseNum] )
    )
)

然后最后添加一个计算列,用上个月的预测日期减去当前的预测日期:

=[ForecastDate]-[PreviousForecastDate]