Dax计算列

Dax calculated column

我有一个带有 OrderNo 和 ProductCategory 的 table。一个订单可以有多个订单行。一个订单也可以有不同的 ProductCategories。 table 看起来像这样:

OrderNo  ProductCategory
O1       Cat1
O1       Cat2
O1       Cat3
O2       Cat1
O3       Cat4

如果 OrderNo 存在 Cat1,我想要一个计算列 "CalcC" returns 1。我希望为具有该订单号的所有行返回 1。

我的结果 table 如下所示:

OrderNo ProductCategory CalcC
O1      Cat1            1
O1      Cat2            1
O1      Cat3            1
O2      Cat1            1
O3      Cat4            0

如果有人能用一些 DAX 语法帮助我实现这一点,我将不胜感激。

谢谢。

CalcC =
IF(
    ISEMPTY(
        CALCULATETABLE(
            'FactOrder'
            ,ALLEXCEPT( 'FactOrder', 'FactOrder'[OrderNo] )
            ,'FactOrder'[ProductCategory] = "Cat1"
        )
    )
    ,0
    ,1
)

IF() 是微不足道的。 ISEMPTY() 检查 table 是否有 0 或 >0 行。 CALCULATETABLE() 根据参数 2-N 中定义的过滤器上下文计算参数 1 中的 table。 ALLEXCEPT() 从命名 table 中清除上下文,仅在命名列上保留它。

我们的 CALCULATETABLE() returns 'FactOrder' 仅当 [OrderNo] 与调用行上下文中存在的相同时。所有过滤器参数都组合在逻辑与中,因此除了将 table 限制为与调用行上下文共享 [OrderNo] 的那些之外,我们还将其限制为 [ProductCategory] ​​= [=17= 的行].

如果 table 为空,我们 return 0,否则我们 return 1.