我有一张桌子,上面有几个案例的月度测量数据。每个案例的一个衡量指标是分析师预测案件将结束的日期(预测日期)。
在第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。
答案 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]