Power BI 中计算最后一天的定式

2021-04-29 17:21:29 浏览数 (1)

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 建立模型的重要标志。

0 人点赞