我有相当复杂的问题要表达。在DAX powerpivot中,我试图创建一个度量,它将在一个度量中使用基于聚合级别的两个不同的加权平均值。
问题更复杂,因为重量测量具有不同的重复级别(需要对它们应用不同的SUM)。我已经能够创建Distinct SUM Measure1和2来解决这个问题。
[Weight_1] = SUMX(DISTINCT(Table1[Level2],[SupportWeight1])
[SupportWeight1] = MAX(Table1[RevenueLevel2])
[Weight_2] = SUMX(DISTINCT(Table1[Level3],[SupportWeight2])
[SupportWeight1] = MAX(Table1[RevenueLevel3])
到目前为止一切顺利,这是必要的,因为正如您将在下面的示例中看到的那样,两个度量都需要在聚合期间进行“重复数据删除”。
每个Level2维度Weight_1
是唯一的,而权重2在每个Level3维度的更高级别上是唯一的。
之后我想利用Weight_1创建加权平均值,创建新的支持列:
[Measure x Weight_1] = [Measure] * [Weight_1]
我忘了提及,权重在更高粒度(Level2和Level3)上是唯一的,但[Measure]
在最低粒度上是唯一的:Level1
现在我有了创造第一加权平均值的所有东西:
[Measure Weight_1] = SUMX(Table1,[Measure x Weight_1])/SUMX(Table1,[Weight_1])
我已经完成并按预期工作。
整蛊部分现在开始了。我在想,只需创建一个下一个支持栏和最终衡量标准,我将完成“最终加权”衡量。并且它将在1,2,3级上以不同的方式表现,并且在Level4,5,6上有所不同......
所以我使用[Measure Weight_1]并创建:
[Measure Weight_1 x Weight_2] = [Measure Weight_1] * [Weight_2]
因此最终措施:
[Measure Weight_2 over Weight_1] =SUMX(Table1, [Measure Weight_1 x Weight_2] )/SUMX(Table1,[Weight_2])
然而,它显然不起作用,这些度量是在不同的粒度上,并且它们在聚合期间不会聚集在一起。在最终衡量问题中,Level3聚合是算术平均而不是加权平均,但我期望得到与[Measure Weight_1]
中相同的结果。因为weight #2
具有相同的值Lvel 3,2,1。
因此,在MDX上使用Focus功能可能会对此类事情进行处理。
也许问题是专栏[Measure Weight_1 x Weight_2]
也许我需要先聚合。
也许可以使用ROLLUP函数完成,但我不确定如何编写它。
我被困在这里。
尝试以编程方式重写我想要的解决方案:
Weighted Average of Measure X =
IF Dim = Level1 Then Measure
IF Dim = Level2 Then AVG(Measure)
IF Dim = Level3 Then SUM(AVG(Measure)*Weight_1) / SUM(Weight_1)
IF Dim = Level4 Then SUM(SUM(AVG(Measure)*Weight_1) / SUM(Weight_1) * Weight_2) / SUM(Weight_2)