PowerBI 的体系已经基本完善,我们将重新思考和拆解其中的固定规律给到大家。我们将这些组合成为:定式,模式,模板。
对于一个点问题的固定求解过程,将形成定式。
有人也可能成为技巧,我们将用定式一词。
日期明确规则
【规则】任何一个有意义的图表或表格,都必须给出明确的日期范围。
这个规则非常好理解:
- 桌子的销售额是 10000;
- 椅子的销售额是 2000;
- 电脑的销售额是 20000。
以上说法全部错误。
在一个表述中,如果不包括日期范围,都是一个错误的表述,如果没有日期范围的限定,那就失去了有效的必要信息。
所以,每个 Power BI 报表的每一页,每一个图都必然在一个预先限定的日期范围内。
日期区间定式
我们此前讲过关于日期方面的理解,这里可以再简单强调:
任何日期区间都可以被理解为:日期线段。由左右日期端点加持的连续日期序列。
那么,对于某一天的日期点来说,它是左端点和右端点重合的线段。
时间智能函数,其作用就在于将这里所描述的日期区间线段,变换到一个目标所期望的状态。可以参考此前文章。
业务问题
在业务实操中,我们往往需要得到这样的效果:
- 不做任何日期区间的指定,有一个默认日期区间。
- 做了日期区间的选择,可以得到一个日期区间。
不论用户如何操作,默认日期区间与自行设置日期区间的综合效果必须符合直觉结果。
最后一天定式
若上下文环境有选择,要获得所选日期区间的最后一天,如下:
代码语言:javascript复制MAX( 'Calendar'[Date] )
若上下文环境无选择,考虑到一个重要规则:
对于日期表,若包含某日期,则应包括这一日期所在的全年日期。
那么,以上计算永远会返回日期表的最后一日,是不正确的。
则获得最后一天的默认计算,如下:
代码语言:javascript复制MAXX( ALL( 'Order'[OrderDate] ) , [OrderDate] )
其中,'Order'[OrderDate]
为表征业务中可反应最后一日的字段。
综合上述情况,若同时兼顾用户选择以及业务实际发生的最后一日,则有:
代码语言:javascript复制MIN(
MAX( 'Calendar'[Date] ) ,
MAXX( ALL( 'Order'[OrderDate] ) , [OrderDate] )
)
它表示从两个日期中获取比较小的那个,以满足:
- 在尚未发生业务的日期中,总会得到发生业务的最后日期点;
- 在已经发生业务的日期中,总会得到日期区间的右端点日期,该日期一定是小于发生业务的最后日期点的。
将日期区间线段赋给计算
以最后日期的指标计算为例,如下:
代码语言:javascript复制Case.KPI.PreviousDay =
VAR vDatePoint =
MIN(
MAX( 'Calendar'[Date] ) ,
MAXX( ALL( 'Order'[OrderDate] ) , [OrderDate] )
)
RETURN
CALCULATE( [KPI] , TREATAS( { vDatePoint } , 'Calendar'[Date] ) )
可以体会这个思路中所有的思想和定式:
- 日期表的线段思维
- 最后一日定式
- 尚未发生业务的日期
- 已经发生业务的日期
- 形成日期区间线段
- 赋给指标计算
总结
本文正式提出定式思维,并展示了整个思维过程以及提取定式的过程,未来给大家带来更多固定套路的定式。
另外,如果可以通过纯文字表述讲清楚以及读者可以理解清楚,表示您已经可以在脑中构建整个业务逻辑,这是熟练操控 Power BI 建立模型的重要标志。