#POWERBI_指标监控(第二部分,周期内下降天数及日期明细)

发布时间 2023-09-27 16:10:48作者: simone331

在指标监控的第一部分文章中,我们已经讲了,如何用DAX去查询一段周期内连续下降或者上升指标。

需要复习的同学可以点击下方链接:

https://www.cnblogs.com/simone331/p/17730677.html

根据学友上篇文章的反馈,今天,我们来拓展学 习一下,如何计算一个周期内(非连续),下降或上升天数统计,以及展示他们的明细日期。

学会第二部分内容,我们又可以进一步丰富我们的指标监控看板了。

我们先来看一下成品的效果。

一:数据源准备及建立基础度量值

还是用我们,第一部分案例用的数据源。

建立基础度量值,产品销量和产品销量日环比度量值,具体代码如下

产品销量 = CALCULATE(SUM('数据源'[销量])) 
产品销量日环比 = 
VAR T1 = CALCULATE([产品销量],DATEADD('日期表'[Date],-1,DAY))
RETURN DIVIDE([产品销量]-T1,T1)

二:建立指标度量值

2.1周期N天_下降天数的度量值

产品销量_周期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天内所有的下降天数。

2.2 周期N天_下降日期明细

产品销量_周期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将这个表中的日期进行拼接,以逗号为分割便得到了最后我们需要的效果。

三:总结

一句话总结这个案例,就是通过构建虚拟日期表,在虚拟日期表的基础上构建虚拟的日期指标表,最后根据需要,去对这个虚拟的日期指标表,进行计数、拼接等等操作,来实现我们的业务模块功能。

如果你感兴趣,并且对文章内容有疑问,欢迎私聊沟通交流。