Powerbi DAX ALLEEXCEPT按多维表的类别求和
我想按类别计算总数。该类别位于维度表中 以下是示例文件: 我有以下型号: 这是我预期的结果。按颜色列出的总数: 我认为通过以下措施可以达到预期的效果:Powerbi DAX ALLEEXCEPT按多维表的类别求和,powerbi,dax,Powerbi,Dax,我想按类别计算总数。该类别位于维度表中 以下是示例文件: 我有以下型号: 这是我预期的结果。按颜色列出的总数: 我认为通过以下措施可以达到预期的效果: ALLEXCEPT_color = CALCULATE ( [Sales], ALLEXCEPT ( FactTable, -- surprisingly 'dim1' table in that place gives wrong results dim1[Color] ) ) 或
ALLEXCEPT_color =
CALCULATE (
[Sales],
ALLEXCEPT (
FactTable, -- surprisingly 'dim1' table in that place gives wrong results
dim1[Color]
)
)
或者使用阿尔贝托·法拉利建议的方法:
这两种措施都有效,并会产生适当的结果。然而,它们将显示的结果相乘,生成所有维度的笛卡尔积。为什么?如何预防
我通过以下措施实现了预期结果:
Expected_Results_Color =
IF (
ISBLANK ( [Sales] ),
BLANK (),
[ALLEXCEPT_color]
)
可能我缺少了关于ALLEXCEPT
函数的某些内容,因此我无法获得第一次拍摄所需的内容。将ALLEXCEPT函数用于多个表,特别是远离星型模式中心的远离维度的表,其背后的逻辑是什么
使用什么模式?我找到了有希望的解决方案,如下所示:
ByCategories =
CALCULATE (
SUM ( FactTable[Sales] ),
ALLEXCEPT (
dim1,
dim1[Color]
),
ALLEXCEPT (
dim2,
dim2[Size]
),
ALLEXCEPT (
dim3,
dim3[Scent]
)
)
但正如我之前测试的那样,它不起作用。它不按维度聚合[销售],而是按维度生成[销售]
所以我发现这是正确的方向:
ByCategories =
CALCULATE (
SUM ( FactTable[Sales] ),
ALLEXCEPT (
FactTable, -- here be difference
dim1[Color],
dim2[Size],
dim3[Scent]
)
)
我推测可能还有另一种方式
Measure =
var MyTableVariable =
ADDCOLUMNS (
VALUES ( dim1[color] ),
"GroupedSales", [Sales]
)
RETURN
...
若我们能够从MyTableVariable中检索GroupedSales的单个标量值,并将其与VisualTable中的适当颜色匹配,那个该多好
我将非常感谢在计算类别总数方面的任何进一步见解。这是预期行为 Power BI表将包括表中任何度量值未计算为
BLANK()
的每一行
ALLEXCEPT
在计算[Sales]
时,阻止id
和size
列中的值影响过滤器上下文,因此这两列的每个可能值都将给出相同的(非空)结果(这导致您看到的笛卡尔积)
例如,在(a,黑色,大)行上,度量值的筛选器上下文包含:
FactTable[id] = {"a"}
dim1[color] = {"black"}
dim2[size] = {"big"}
然后CALCULATE([Sales],ALLEXCEPT(…)
在评估[Sales]
时从过滤器上下文中删除FactTable[id]
和dim2[size]
;因此,新的过滤器上下文只是:
dim1[color] = {"black"}
此筛选器上下文中的[Sales]
不是BLANK()
,因此该行包含在结果中
解决此问题的正确方法是将结果包装在
IF
中,就像您在预期结果\u Color
度量中所做的那样,或者在Power BI中的表中添加一个[Sales]not Blank
过滤器。我建议更改您的数据模型。创建dim“Color”,dim“Size”,并在事实表中具有相应的ID。在维度之间共享同一id毫无意义。@RADO当然你的评论是正确的。然而ALLEXCEPT进行交叉连接。我已经更新了我的示例并上传了新的pbix文件;但是,您可能还需要做一件事。这些a、b、c等ID是什么?它们是什么意思?在我看来,它们也必须是一个维度(在事实表中具有相应的id)。然后,在矩阵中,您应该从维度使用这些a、b、c等,而不是从fact@RADO我来检查一下。使用多个表和ALLEXCEPT有什么规则吗?其实这是我问题的根源。我应该如何在多维上使用ALLEXCEPT创建group by?我应该从事实表开始吗ALLEXCEPT(FactTable,dim1[color],dim2[size])
或者我应该让计算([Sales],ALLEXCEPT(dim1,color),ALLEXCEPT(dim2,size))
?
dim1[color] = {"black"}