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]
我有一个 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]