微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在DAX Power BI中计算3个月的移动平均值而没有空白值

如何解决在DAX Power BI中计算3个月的移动平均值而没有空白值

我有客户服务表,具有 [计费分钟] 值。

我需要创建 [3个月移动平均值] 度量,在该度量中 仅发生-如果 [计费分钟] 中的所有3个月中都有值 ,则 存在! (见下文)

如果 [计费分钟] 值在我的客户服务表中至少一个月内为空白,则我要 [平均移动] 显示0或空白!

我的目标:

        Client Services table:                              Result:

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

为了达到我的目标,我在 [平均移动3个月] 中使用以下DAX表达式:

     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,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
     

因此,它采用客户服务表中的现有值,然后将其除以期数。 例如对于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],PeriodToUse)                                                                                                                      
      VAR NMonthsPeriodBlank = 
         if([Billable Minutes] = BLANK(),1) + 
         if([Billable Minutes Prev Month] = BLANK(),1) + 
         if([Billable Minutes 2nd Prev Month] = BLANK(),1)                                       

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

  

解决方法

请遵循以下步骤-

第1步:考虑到每月的第1个日期,将您的期间列转换为“日期”-

enter image description here

步骤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(),1) + if([total prev] = BLANK(),1) + if([total second prev] = BLANK(),1)
VAR total_amount = [total] + [total prev] + [total second prev]

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

这是最终输出-

enter image description here

================== 单一解决方案 ===================

您可以如下将所有小节转换为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(),1) + 
if(prev_month = BLANK(),1) + 
if(second_prev_month = BLANK(),1)

VAR total_amount = this_month + prev_month + second_prev_month

RETURN IF(
    devide_by < 3,total_amount/devide_by
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。