在指标监控的第一部分文章中,我们已经讲了,如何用DAX去查询一段周期内连续下降或者上升指标。
需要复习的同学可以点击下方链接:
https://www.cnblogs.com/simone331/p/17730677.html
根据学友上篇文章的反馈,今天,我们来拓展学 习一下,如何计算一个周期内(非连续),下降或上升天数统计,以及展示他们的明细日期。
学会第二部分内容,我们又可以进一步丰富我们的指标监控看板了。
我们先来看一下成品的效果。
还是用我们,第一部分案例用的数据源。
建立基础度量值,产品销量和产品销量日环比度量值,具体代码如下
产品销量 = CALCULATE(SUM('数据源'[销量])) 产品销量日环比 = VAR T1 = CALCULATE([产品销量],DATEADD('日期表'[Date],-1,DAY)) RETURN DIVIDE([产品销量]-T1,T1)
产品销量_周期N天_下降天数 = VAR N='参数'[参数_值] ///控制天数,可以是一个固定的值,也可以是一个字段参数,动态的值 VAR date_table = SUMMARIZE (FILTER('日期表','日期表'[Date]>=MAX('数据源'[日期])-N+1 &&'日期表'[Date]<=MAX('数据源'[日期])), '日期表'[Date]) VAR sales_table = ADDCOLUMNS(date_table,"产品日环比",[产品销量日环比]) RETURN COUNTROWS(FILTER(sales_table,[产品销量日环比]<0))
代码解释:代码的前半段,与我们第一部分案例代码一致,就不重复讲解了,有需要的朋友,可以去第一篇案例查看对应代码解释,不同的点在于,我们这段代码返回的值是
RETURN COUNTROWS(FILTER(sales_table,[产品销量日环比]<0))
这里怎么去理解呢?
我们的sales_table 是由N天日期与销量日环比组成的虚拟表,这里存储了我们所有下降日期及日环比指标,我们通过FILTER(sales_table,[产品销量日环比]<0),把指标下降的日期的行筛选了出来。
然后通过COUNTROWS去对行进行计数,那么将返回一个值,这个值就是销量日环比小于0的天数,即下降的天数。
这里的N是一个变量。如果我们的参数设置为30天,那么就会返回我们30天内所有的下降天数。
产品销量_周期N天_下降日期明细 = VAR N='参数'[参数_值] ///控制天数,可以是一个固定的值,也可以是一个字段参数,动态的值 VAR date_table = SUMMARIZE (FILTER('日期表','日期表'[Date]>=MAX('数据源'[日期])-N+1 &&'日期表'[Date]<=MAX('数据源'[日期])), '日期表'[Date]) VAR sales_table = ADDCOLUMNS(date_table,"产品日环比",[产品销量日环比]) VAR sales_table_below = FILTER(sales_table,[产品销量日环比]<0) RETURN CONCATENATEX(sales_table_below,'日期表'[Date]," , ")
代码解释:
因为我们需要下降日期的明细,所以2.1中的代码就不适用了,因为countrows返回的是一个值,并不是文本,这里就到了CONCATENATEX函数发挥作用了,sales_table_below 变量 是所有下降日期的表,我们通过CONCATENATEX将这个表中的日期进行拼接,以逗号为分割便得到了最后我们需要的效果。
一句话总结这个案例,就是通过构建虚拟日期表,在虚拟日期表的基础上构建虚拟的日期指标表,最后根据需要,去对这个虚拟的日期指标表,进行计数、拼接等等操作,来实现我们的业务模块功能。
如果你感兴趣,并且对文章内容有疑问,欢迎私聊沟通交流。
Enjoy Dax By Simone