Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 在DAX Power BI中计算3个月无空白值的移动平均值_Powerbi_Dax_Moving Average_Isnullorempty - Fatal编程技术网

Powerbi 在DAX Power BI中计算3个月无空白值的移动平均值

Powerbi 在DAX Power BI中计算3个月无空白值的移动平均值,powerbi,dax,moving-average,isnullorempty,Powerbi,Dax,Moving Average,Isnullorempty,我有客户服务表,表中有[计费分钟数]值 我需要创建[3个月移动平均数]度量,计算将 仅发生-如果[计费分钟数]中的所有3个月都有值存在! (见下文) 如果我的客户服务表中的[Billable Minutes]值在至少一个月内为空,则我希望[Moving Avg]将显示0或空 我的目标是: Client Services table: Result: Period [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表达式来表示[移动平均值3个月]

     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
     
因此,它获取客户服务表中的现有值,并将其除以时段数。 例如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个月内的[计费分钟]= 在内部 [计费分钟数]+[上月计费分钟数]+ [上个月第二次计费分钟数]

请参阅以下更新内容(工作完美):

enter
3个月平均计费分钟数=
VAR PeriodToUse=datesPeriod('日历FY'[日期],
LASTDATE('日历FY'[日期]),-3,月)
VAR结果=计算(除以([计费分钟],
COUNTROWS(“日历FY”)、PeriodToUse)
变量NMonthsPeriodBlank=
如果([Billable Minutes]=BLANK(),0,1)+
如果([上月计费分钟数]=空白(),0,1)+
如果([Billable Minutes 2nd Prev Month]=BLANK(),0,1)
返回IF(NMonthsPeriodBlank<3,BLANK(),Result)

遵循以下步骤-

第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
)

第二步:点击关闭并应用返回报告,并在下面4个措施中创建此项-

total = SUM('Client Services'[Billable Minutes])
3个月平均工资=
变量devide_by=if([total]=BLANK(),0,1)+if([total prev]=BLANK(),0,1)+if([total second prev]=BLANK(),0,1)
VAR总金额=[total]+[total prev]+[total second prev]
返回如果(
以小于3的速度进行偏差,
BLANK(),
总金额/设备(按)
)
这是最终输出-

====================== 单次测量的解决方案 ======================

您可以将所有度量值转换为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
)
3个月平均新增=
本月风险值=总和(“客户服务”[计费分钟])
VAR上个月=
算计(
金额(“客户服务”[计费分钟],
上个月(“客户服务”[期间])
)
VAR第二个月上一个月=
算计(
金额(“客户服务”[计费分钟],
上个月(
日期添加(
“客户服务”[期间],
-1,
月
)
)
)
变量devide_by=
如果(本月=BLANK(),0,1)+
如果(上个月=空白(),0,1)+
如果(第二个上一个月=空白(),0,1)
风险值总额=本月+上个月+第二个上个月
返回如果(
以小于3的速度进行偏差,
BLANK(),
总金额/设备(按)
)

事实上,我明白你的意思-让我明天再试一次,如果成功的话我会发布!希望它对你有用。请接受答案,如果有帮助,请投赞成票:)谢谢你,这个主意奏效了!我将用修改后的代码更新我原来的帖子。还有一个小问题-如果我平均需要6个月或12个月,我需要为第3个月、第4个月、第5个月等制定6个或12个额外措施。只是想知道是否有更优雅的方法来实现这一点。将继续研究-但thx再次,你的想法帮助了很多@Hell-1931,这也可以使用单一度量。我使用单独的测量只是为了让你清楚地了解我的想法,请用单一测量选项检查我的更新答案。你可以看到我有-1个月的时间来获得前一个月的第二个月。现在可以添加更多变量并使用-2,-3。。。去上个月的第3/4次。
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
)
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
)