如何在Power BI中使用Dax获取嵌套平均值?

时间:2019-05-28 05:30:03

标签: powerbi dax

我正在尝试在DAX中计算度量中一列的平均值,但是我遇到的问题是值在多行上重复。

数据如下:

Line  ID  Value
1     1   10
2     1   10
3     1   10
4     1   10
5     1   10
6     2   40
7     2   40
8     3   90
9     3   90
10    3   90

当我这样做

sum(data[Value]) / countrows(data)

答案将是(50 + 80 + 270)/ 10 = 40。

但是,我希望答案是(10 + 40 + 90)/ 3 = 46.7

我知道我必须除以3,并且可以将3除以

distinctcount(data[ID])

但是我发现很难提取10、40和90。

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。例如:

Average Value =
  VAR Summarized_Table = SUMMARIZE ( Data, Data[ID], Data[Value] )
  VAR Total_Value = SUMX ( Summarized_Table, Data[Value] )
  VAR Total_Count = COUNTROWS ( Summarized_Table )
  RETURN
    DIVIDE ( Total_Value, Total_Count )

结果:

enter image description here

说明:

  • 首先,我们通过将数据分组在ID和Value列上来创建数据的摘要版本。分组消除了重复,因此摘要表仅包含3条记录。我们将表保存在变量中;
  • 第二,我们总结汇总表(140)中的值;
  • 第三,我们计算汇总表(3)中的记录数
  • 最后,我们将总和与计数除以返回结果

或者,您可以执行以下操作:

Average Value =
  AVERAGEX ( VALUES ( Data[ID] ), CALCULATE ( AVERAGE ( Data[Value] ) ) )

结果相同,但逻辑不同:

  • 首先,我们使用VALUES创建一个不同ID的列表;
  • 第二,我们使用AVERAGEX迭代列表,并为每个ID计算其平均值。例如,对于ID = 1,结果将是(50)/ 5 = 10的平均值;
  • 最后,我们将平均值平均为(10 + 40 + 90)/ 3