DAX强制ALLEXCEPT函数在没有销售的地方返回空白

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAX强制ALLEXCEPT函数在没有销售的地方返回空白相关的知识,希望对你有一定的参考价值。

我想按类别计算总数。类别在维度表中。

这里是示例文件:DAX ALLEXCEPT making cross join.pbix

我有以下模型:

enter image description here

这些是我的预期结果。按颜色总计:

enter image description here

我认为我可以通过以下措施获得预期的结果:

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]
)

enter image description here

[我可能缺少关于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阻止在计算idsize[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函数在没有销售的地方返回空白的主要内容,如果未能解决你的问题,请参考以下文章

数据可视化之DAX篇(二十三)ALLEXCEPT应用示例:更灵活的累计求和

Power BI Desktop DAX 重启运行总计列

POWER BI DAX函数应用-筛选器函数(上)

Power BI--DAX函数总结

DAX从入门到精通 5-7 介绍allselected函数

PowerBI DAX计算:按月的移动平均线组计算