我有客户服务表,具有 [计费分钟] 值。
我需要创建 [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,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],
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)
答案 0 :(得分:1)
请遵循以下步骤-
第1步:考虑到每月的第1个日期,将您的期间列转换为“日期”-
步骤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
)