如何解决在 DAX 中计算加权平均值和加权标准差
这是我以前从未尝试过的
我想计算包含针对设定值测量的实际值的记录的数据集的加权标准偏差和加权平均值
计算将使用 PowerBI 中的 DAX 查询完成
设置值1 | 实际值 1 | 设置值2 | 实际值 2 |
---|---|---|---|
10 | 8 | 101 | 102 |
10 | 11 | 101 | 104 |
10 | 12 | 101 | 97 |
10 | 7 | 101 | 99 |
10 | 13 | 101 | 97 |
10 | 13 | 101 | 100 |
10 | 9 | 101 | 98 |
10 | 10 | 101 | 100 |
10 | 8 | 101 | 102 |
10 | 14 | 101 | 98 |
10 | 8 | 101 | 98 |
10 | 13 | 101 | 96 |
10 | 13 | 101 | 103 |
10 | 14 | 101 | 102 |
10 | 7 | 202 | 205 |
20 | 18 | 202 | 198 |
20 | 18 | 202 | 197 |
20 | 19 | 202 | 203 |
20 | 19 | 202 | 202 |
20 | 19 | 202 | 201 |
20 | 22 | 202 | 202 |
20 | 18 | 202 | 200 |
20 | 17 | 202 | 195 |
20 | 23 | 202 | 198 |
编辑1: 请使用以上数据。 另外,请注意,虽然设置点是我们打算用作权重的,但它是特定设置点的计数。例如:如果设定点 1 10 重复 15 次,设定点 1 20 重复 9 次,则分别用作 15 和 9
解决方法
加权平均和标准差可以根据其数学定义在 DAX 中实现。
假设我们有一个包含权重和值列的表格,加权平均值的公式为
WAvg =
VAR Num = SUMX( Samples,Samples[Weight] * Samples[Value] )
VAR Den = SUM( Samples[Weight] )
RETURN DIVIDE( Num,Den )
加权标准差的公式为
WStdDev =
VAR WAvg = [WAvg]
VAR Num = SUMX( Samples,Samples[Weight] * (Samples[Value] - Wavg)^2 )
VAR Den = SUM( Samples[Weight] )
VAR WVar = DIVIDE( Num,Den )
RETURN SQRT(WVar)
编辑: 如果我理解您的新要求,权重是具有相同设置值的行数,用于每个实际值。然后,由于有两对列,我假设要求是每对列都有一组度量。
该公式需要将每组Set Value的行数相加,作为权重。我将示例表导入为表“V”
设定值 1 和实际值 1 的加权平均值
WAvg1 =
VAR Num =
SUMX(
ALL( V ),CALCULATE( COUNTROWS( V ),ALLEXCEPT( V,V[Set Value 1] ) ) * V[Actual Value 1]
)
VAR Den =
SUMX(
ALL( V ),V[Set Value 1] ) )
)
RETURN
DIVIDE( Num,Den )
设定值 2 和实际值 2 的加权平均值
WAvg2 =
VAR Num =
SUMX(
ALL( V ),V[Set Value 2] ) ) * V[Actual Value 2]
)
VAR Den =
SUMX(
ALL( V ),V[Set Value 2] ) )
)
RETURN
DIVIDE( Num,Den )
设定值 1 和实际值 1 的加权标准偏差
WStdDev1 =
VAR Num =
SUMX(
ALL( V ),VAR WAvg = [WAvg1]
RETURN
CALCULATE( COUNTROWS( V ),V[Set Value 1] ) ) * ( V[Actual Value 1] - WAvg ) ^ 2
)
VAR Den =
SUMX(
ALL( V ),V[Set Value 1] ) )
)
VAR WVariance =
DIVIDE( Num,Den )
RETURN
SQRT( WVariance )
设定值 2 和实际值 2 的加权标准偏差
WStdDev2 =
VAR Num =
SUMX(
ALL( V ),VAR WAvg = [WAvg2]
RETURN
CALCULATE( COUNTROWS( V ),V[Set Value 2] ) ) * ( V[Actual Value 2] - WAvg ) ^ 2
)
VAR Den =
SUMX(
ALL( V ),V[Set Value 2] ) )
)
VAR WVariance =
DIVIDE( Num,Den )
RETURN
SQRT( WVariance )
将这些公式应用到示例表中,我们得到了这些结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。