DAX分享21:显示订单日期下的销量值

浏览: 1228

之前的一个订单报告中,用户要求数据显示最近12个月的数据。很简单的,就在 filter里面加入了关于Date的Relative date,最近12个月(包括今天)

然后都做好了,准备上线了。用户说,希望默认打开报表的情况下,显示的是最近12个月的数据,然后之前的数据,我们还是想也能够看到并选择的。

像我说的,除非不想做,没有啥做不了的~~但要上线了,然后这样那样这样那样,要喝点可乐压压惊。做,还是必须要做的。

对于一个懒胖子(不小心又长了10斤的胖子),一想到要修改报表中的所有相关的度量值,胖子第一反应就是拒绝。然后就推出了胖子的第一个修改版本。用Bookmark。

在点击Select Period按钮之前,需要清空掉Date里面的内容。胖子贴心的加了tooltips。

唉,效果一般。因为还是有人会忘记在清掉Date里面的选择。为啥不用Bookmark里面Data选项?因为还有其他的slicer,我们希望在使用bookmark的时候保留Slicer Data上的筛选值。如果用了Data选项,所有的filter都会被一起干掉。

然后,中间经过了一些挣扎,最后,还是用了修改所有度量的方法。

报表显示如下:

一个Slicer,包括Year和Year Month信息

一个by Order Month的Quantity的图

21.9.png

创建度量值如下:


Order Quantity = 
var _maxdate = CALCULATE(MAX(Sales[Order Date]),ALL(Sales))
var _last12month = EDATE(_maxdate,-12)-2
return
IF(
OR(ISFILTERED('Date Time'[Year Month]),ISFILTERED('Date Time'[Year])),
SUM(Sales[Quantity]),CALCULATE(SUM(Sales[Quantity]),FILTER('Date Time','Date Time'[Date]>_last12month)))


因为例子中Sale表的Order Date的日期范围是2007年1月到2009年12月,所以这里用了CALCULATE(MAX(Sales[Order Date]),ALL(Sales))。如果有最新数据的条件下,可以直接用Today()这个函数。把下面这句替换上去就可以了。

VAr _last12month = EODATE(TODAY(),-12)-2

如果不小心,还有未来的数据,记得加入

   SUM(Sales[Quantity]),CALCULATE(SUM(Sales[Quantity]),FILTER('Date Time',and('Date Time'[Date]>_last12month,'Date Time'[Date]<=Today())))

具体问题具体分析。

当选择了全部的日期,就会显示全部日期的值。

如果选择了部分日期,就会得到部分日期的值

其实这个需求也不是很难。主要是抓取对到日期的直接筛选,然后展示不同的计算结果。

不过这里有个Power BI工具本身的局限性。对于Slicer里面,我们是分不出select nothing (就是默认什么都不选)和select all的。

这里select all是下面这个控件选项的意思。

在报表用的体现是下图的 Select all

ISFILTERED抓不到Select all和select nothing的区别。我也想过用count slicer里面的value的方法,也是分不出Select all和select nothing。也问了微软的support,没有区分的方法。

虽然在工具上有这个局限性,但是,如上例,在Date的Slicer中加入了Year这个group。这样对用户来说,也不用一个一个Year Month的选那么麻烦。可以相对简单的实现选择select all的功能。还好~~

每天进步一点就好~~要是每天多赚一点就更好了~~哈哈哈

推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册