基于另一个维度的 DAX 加权平均值

DAX weighted average based on another dimension

我有以下数据:

DATE        COUNTRY     ITEM        Value
2005-01-01  UK          op_rate     30%
2005-01-01  UK          proc        1000
2005-01-01  UK          export      750 
2005-01-01  ITA         op_rate     45%
2005-01-01  ITA         proc        500 
2005-01-01  ITA         export      350

基本上,正常格式的数据,包括比率(op_rate)和其他项目,例如出口量和处理量("proc")。

我需要通过 SUM 对 "proc" 和 "export" 进行汇总,但对于 "op_rate" 则不需要,为此我需要 [=25] 的加权平均值=].

在这种情况下,汇总的 op_rate 将是: 0.45*500 + 0.30*1000 = 0.35 // 而不是 .75 SUM 或 0.375 AVERAGE

我找到的所有加权平均值示例都是跨度量的,但none涵盖使用其他维度。

欢迎任何帮助!

@RADO 是正确的。你绝对应该调整你的 ITEM 列来得到这个。

那么 op_rate 上的加权平均值可以简单地写成

= DIVIDE(
      SUMX(Table3, Table3[op_rate] * Table3[proc]),
      SUMX(Table3, Table3[proc]))

我了解到您不愿意更改模型。您在这里遇到的问题是您正在尝试使用高度规范化的 table 并将其用于使用 OLAP 工具进行的分析。 OLAP 工具更喜欢 Fact/Dim 星型模式,Tabular/PowerBI 也不例外。我怀疑这也会继续影响未来的需求。现在着手改变结构是最好的时机,越久越难做。

这并不是说您不能使用这些工具做您想做的事,但是生成的 dax 效率会较低,并且所需的存储空间不是最佳的。

因此 caveat/lecture 给定 (!) 这是您可以如何做到的。

op_rate_agg =
VAR pivoted =
    ADDCOLUMNS (
        SUMMARIZE ( 'Query1', Query1[COUNTRY], Query1[DATE] ),
        "op_rate", CALCULATE ( AVERAGE ( Query1[Value] ), Query1[ITEM] = "op_rate" ),
        "proc", CALCULATE ( SUM ( Query1[Value] ), Query1[ITEM] = "proc" )
    )
RETURN
    DIVIDE ( SUMX ( pivoted, [op_rate] * [proc] ), SUMX ( pivoted, [proc] ) )

它真的很低效,因为它必须在每次执行时都构建你的透视集,你会发现查询计划必须做比你将其作为正确的事实坚持下去更多的工作 table.如果您的模型很大,您可能会遇到此度量和任何引用它的性能问题。