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