#POWERBI_指標監控(第二部分,週期內下降天數及日期明細)

simone331發表於2023-09-27

在指標監控的第一部分文章中,我們已經講了,如何用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將這個表中的日期進行拼接,以逗號為分割便得到了最後我們需要的效果。

三:總結

一句話總結這個案例,就是透過構建虛擬日期表,在虛擬日期表的基礎上構建虛擬的日期指標表,最後根據需要,去對這個虛擬的日期指標表,進行計數、拼接等等操作,來實現我們的業務模組功能。

如果你感興趣,並且對文章內容有疑問,歡迎私聊溝通交流。

Enjoy Dax By Simone

相關文章