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

时间:2015-06-05 01:44:16

标签: date powerpivot dax

我有一张桌子,上面有几个案例的月度测量数据。每个案例的一个衡量指标是分析师预测案件将结束的日期(预测日期)。

在第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

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

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

我在想我需要用CALCULATE / MAX / EARLIER减去当前行的日期,但我无法使它工作。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

使用这个度量,每个的第一个记录会给你一个疯狂的数字,一种方法是引入一个IF()来检查CALCULATE是否为BLANK()。

希望这是有道理的。

答案 1 :(得分:0)

同样的事情,但不同......

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

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

添加另一个计算列(PreviousForecastDate)以获取该计算的上一个度量月的ForecastDate:

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

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

=[ForecastDate]-[PreviousForecastDate]