Power BI如何保持报告每天都被默认选择为当天?
2 个回答
我是BI佐罗,在我公众号这个问题我们之前讲过,最近很多小伙伴问起,我们再来说明下。 ( ❤️ 文末有福利赠送)
假设今天是2020.06.20,那么,可以使用相对日期筛选器,如下:
该筛选器使用 日期表中的日期列 作为筛选条件,并设置使用相对日期筛选,如下:
这样就可以确保总是显示相对于今天的上一天。
那么,此时的报告在数据自动更新后,总会显示为 相对今天 的数据。
注意,这里的相对今天也可能是 相对今天的上一天 。
日期的相对性
在报表的时间体系中,其实有两套坐标系:
- 现实世界
- 报表世界
现实世界,其中的今天是以现实现实世界的时间来做参考的;报表世界,其中的今天是以报表刷新的最后日期来做参考的。
在 PowerBI 给出的可视化控件中,目前给到用户的是一种静态设置,如下:
定位标记日期指定了要相对的日期,默认是 现实世界的今天 。这并不能满足我们的需要。
所以,问题一就来了: 如何基于某个动态日期点给出筛选,该动态日期点由度量值给出 。
日期列表筛选器
日期的相对性问题,只是问题之一,另一个问题是,如果使用日期表作为筛选器,如下:
这种效果有时候是用户一定需要的,选择一个具体的日期点,但问题来了两个:
- 该切片器不会随着数据的更新而自动选择最后更新的日期
- 该切片器如果使用日期表的日期,会显示没有事实数据的日期
问题的分析
至此,积累了三个问题,如下:
- 第一条,如何基于某个动态日期点给出筛选,该动态日期点由度量值给出。
- 第二条,切片器应随着数据的更新而自动选择最后更新的日期。
- 第三条,切片器应只显示有事实数据的日期供用户选择。
这里的入手点是:切片器应随着数据的更新而自动选择最后更新的日期。
通过观察,很快发现 PowerBI 的切片器是不会自动选择某个选项的,至少这绝不会由数据更新而触发,那么,就必须要确保切片器默认选择的选项永远都必须是合理的,例如:假设报告最后刷新日期是 2020.06.27 那么,
这种表现就是默认下可以确保所需效果的。
首先需要一个度量值:
Start:Date.LastDate.All = MAXX( ALL( 'Order'[OrderDate] ) , [OrderDate] )
然后构造一个计算列:
日期视图 =
IF( [Date] = [Start:Date.LastDate.All] , "最后一天" , FORMAT( [Date] , "yy/MM/dd" ) )
这样就实现了效果:
我丢,这效果有点不对,除了“最后一天”,其他的日期都显示了出来,这也需要处理。
最终实现
在积累的第二条问题得到解决后,再来看让现在的日期只是相对于我们需要的日期来显示,这就需要:“切片器的切片器”技术。
构建一个度量值如下:
Topic.Date.IsValid =
IF( VALUES( 'Calendar'[Date] ) <= [Start:Date.LastDate.All] , 1 , 0 )
该度量值用来判断如果是报告最后晒新日期以内的,用 1 表示,否则标记为无效,用 0 表示。
将该度量值用作上述切片器的切片器,如下:
这样就 OK 了。
细节优化
如果觉得这样不够完美,用户不知道最后一天是哪天,可以这样做,再做一个度量值:
Topic.CurrentDate =