首页 > 解决方案 > 如何计算每月平均值,包括 Power BI 中没有记录的月份

问题描述

我正在尝试计算每个调查员的每月平均病例数。它可能超过一个季度、一年或多年,因此它需要响应我放入的视觉或表格上下文。基表具有案例(个人案例#)、调查员(人名)、分配日期(未显示),并从该日期、月份和年份列中提取以及 YearMonth 分类列。

模拟数据

我创建一个 caseCount 度量为

caseCount = COUNT('Table'[Case])

在此处输入图像描述

我尝试了几种不同的方法来计算所有月份的平均值(在本例中为 4)。因为 Mary 每个月都有病例,所以她的平均值是正确的 (1.75),但 Sam 使用的分母 = 3,因此计算不正确。(返回 1.3 而不是 1)。如何强制计算使用完整的月数。

附加说明:表中可能存在超出我想要的日期范围的情况,因此我尝试使用

Avg = CALCULATE(AVERAGE(caseCount), Table[Date] > #10/31/2019#)

我还使用 CALCULATE(DIVIDE(), [Date] > 10/31/2019 YearMonth 值在那里创建。

标签: powerbiaveragedax

解决方案


这是因为评估上下文。
我将度量定义如下:

VAR _casecount = //count number of cases in the selected period, applied on the fact table
VAR _months = COUNTROWS(CALCULATETABLE(VALUES('Calendar'[Month]), ALLSELECTED('Calendar'))) //count number of months in the selected period
RETURN
_casecount/months

更新

我没有考虑涉及 2019 年 5 月和 2020 年 5 月的多年期情景。然后,让我们使用DATEDIFF重新构建解决方案:

VAR _casecount = //count number of cases in the selected period, applied on the fact table
VAR _firstCalendarDate = CALCULATE(MIN('Calendar'[Date], ALLSELECTED('Calendar'))
VAR _lastCalendarDate = CALCULATE(MAX('Calendar'[Date], ALLSELECTED('Calendar'))
VAR _months = DATEDIFF(_firstCalendarDate, _lastCalendarDate, MONTH)
RETURN
_casecount/months

推荐阅读