簡體   English   中英

在 DAX Power BI 中計算 3 個月沒有空白值的移動平均線

[英]Calculating a Moving Average for 3 months without blank values in DAX Power BI

我有[Billable Minutes]值的客戶服務表。

我需要創建[3 個月的移動平均數]度量,其中計算只會發生 -如果[計費分鍾]中所有 3 個月的值都存在! (見下文)

如果我的客戶服務表中的[Billable Minutes]值在至少一個月內為空白,那么我希望[Moving Avg]將顯示為 0 或空白!

我的目標:

        Client Services table:                              Result:

       Period     [Billable Minutes]                       Period     [Moving Avg]
       2018-11                   200                       2019-01             200  
       2018-12                   300
       2019-01                   100
       

為了實現我的目標,我將以下 DAX 表達式用於[Moving Avg 3 months]

     Moving Avg 3 month = 
      
      VAR PeriodToUse = DATESINPERIOD('Calendar FY'[Date], LASTDATE('Calendar FY'[Date]), -3, MONTH)
      VAR Result = CALCULATE(DIVIDE([Billable Minutes], COUNTROWS ('Calendar FY')), PeriodToUse) 
      VAR  ZeroValue=IF(Minx('Client Services',[Billable Minutes])=0,0,Result)                                
         
         Return Result

但是,不幸的是,我的最終結果是:

        Client Services table:                              Result:

       Period     [Billable Minutes]                       Period     [Moving Avg]
       2018-11                   200                       2018-11             67  
       2018-12                   300                       2018-12            167
       2019-01                   100                       2019-01            200
     

因此,它采用Client Services表中的現有值並將它們除以期間數。 例如對於 2018-11, 2018-10, 2018-09 - 它需要 (200+0+0)/3=66.6 (67 四舍五入) 但我需要 2018-11 的移動平均為空,因為沒有客戶服務表中 2018-10、2018-09 的值(相同 - 對於 2018-12,不應計算)

請幫忙!

更新:

這是對此的解決方案(感謝下面的答案)為了檢查所選期間是否為零,應創建額外的措施:

     Billable Minutes 
     Moving Avg Prev Month = Calculate('Client Services'[Billable Minutes], 
                                        PREVIOUSMONTH('Calendar FY'[Date]))
                       
     Billable Minutes 
    Moving Avg 2nd Prev Month = Calculate
                             ('Client Services'[Billable Minutes Prev Month], 
                                        PREVIOUSMONTH('Calendar FY'[Date]))

然后,當您檢查是否存在零值時 - 您需要檢查它 - 不僅針對 [可計費分鍾數],還針對 3 個月內的 [可計費分鍾數] = [可計費分鍾數]+[上個月可計費分鍾數]+ [上個月第 2 次計費分鍾數]

請參閱下面的更新(完美運行):

enter 
     Billable Minutes 3 Months Avg = 

      VAR PeriodToUse = DATESINPERIOD('Calendar FY'[Date], 
                        LASTDATE('Calendar FY'[Date]), -3, MONTH)
      VAR Result = CALCULATE(DIVIDE([Billable Minutes], 
                        COUNTROWS ('Calendar FY')), PeriodToUse)                                                                                                                      
      VAR NMonthsPeriodBlank = 
         if([Billable Minutes] = BLANK(),0,1) + 
         if([Billable Minutes Prev Month] = BLANK(),0,1) + 
         if([Billable Minutes 2nd Prev Month] = BLANK(),0,1)                                       

          RETURN IF(NMonthsPeriodBlank < 3, BLANK(), Result)

  

請按照以下步驟操作-

第 1 步:將您的Period列轉換為 Date,考慮每月的第一個日期,如下所示-

在此處輸入圖片說明

第 2 步:單擊“關閉並應用”返回報告並創建以下 4 項措施-

total = SUM('Client Services'[Billable Minutes])
total prev = CALCULATE([total],PREVIOUSMONTH('Client Services'[Period]))
total second prev = CALCULATE([total prev],PREVIOUSMONTH('Client Services'[Period]))
3 month avergae = 

VAR devide_by = if([total] = BLANK(),0,1) + if([total prev] = BLANK(),0,1) + if([total second prev] = BLANK(),0,1)
VAR total_amount = [total] + [total prev] + [total second prev]

RETURN IF(
    devide_by < 3,
    BLANK(),
    total_amount/devide_by
)

這是最終的輸出 -

在此處輸入圖片說明

====================解在單一測量====================

您可以將所有度量轉換為 1 個度量,如下所示-

3 month average new = 

VAR this_month = SUM('Client Services'[Billable Minutes])

VAR prev_month = 
CALCULATE(
    SUM('Client Services'[Billable Minutes]),
    PREVIOUSMONTH('Client Services'[Period])
)

VAR second_prev_month = 
CALCULATE(
    SUM('Client Services'[Billable Minutes]),
    PREVIOUSMONTH(
        DATEADD(
            'Client Services'[Period],
            -1,
            MONTH
        )
    )
)

VAR devide_by = 
if(this_month = BLANK(),0,1) + 
if(prev_month = BLANK(),0,1) + 
if(second_prev_month = BLANK(),0,1)

VAR total_amount = this_month + prev_month + second_prev_month

RETURN IF(
    devide_by < 3,
    BLANK(),
    total_amount/devide_by
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM