DAX强制ALLEXCEPT函数在没有销售的地方返回空白
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAX强制ALLEXCEPT函数在没有销售的地方返回空白相关的知识,希望对你有一定的参考价值。
我想按类别计算总数。类别在维度表中。
这里是示例文件:DAX ALLEXCEPT making cross join.pbix
我有以下模型:
这些是我的预期结果。按颜色总计:
我认为我可以通过以下措施获得预期的结果:
ALLEXCEPT_color =
CALCULATE (
[Sales],
ALLEXCEPT (
FactTable, -- surprisingly 'dim1' table in that place gives wrong results
dim1[Color]
)
)
或使用Alberto Ferrari https://www.sqlbi.com/articles/using-allexcept-versus-all-and-values/建议的方法:
ALL_VALUES_color =
CALCULATE (
[Sales],
ALL (FactTable), -- again, 'dim1' produces wrong results, has to be FactTable
VALUES ( 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]
)
)
https://community.powerbi.com/t5/Desktop/Allexcept-from-two-tables/td-p/255925
或者我们应该这样走吗:
ByCategories =
CALCULATE (
SUM ( FactTable[Sales] ),
ALLEXCEPT (
FactTable, -- here be difference
dim1[Color]
dim2[Size]
dim3[Scent]
)
)
如何在没有销售的地方留空?
这是预期的行为。
Power BI表将包括该表中任何度量均不等于BLANK()
的每一行。
ALLEXCEPT
阻止在计算id
时size
和[Sales]
列中的值影响过滤器上下文,因此这两列的每个可能值都将给出相同(非空白)的结果(这会导致您看到的笛卡尔积)。
例如,在(a,黑色,大)行上,度量的过滤器上下文包含:
FactTable[id] = {"a"}
dim1[color] = {"black"}
dim2[size] = {"big"}
然后CALCULATE([Sales], ALLEXCEPT(...))
在评估FactTable[id]
时从过滤器上下文中删除dim2[size]
和[Sales]
;所以新的过滤器上下文是:
dim1[color] = {"black"}
此过滤器上下文中的[[Sales]
不是BLANK()
,因此该行包含在结果中。
解决此问题的正确方法是,像在IF
度量中那样将结果包装在Expected_Results_Color
中,或在[Sales] not Blank
上的过滤器中添加到Power BI中的表。
以上是关于DAX强制ALLEXCEPT函数在没有销售的地方返回空白的主要内容,如果未能解决你的问题,请参考以下文章