我有一个包含OrderNo和ProductCategory的表。一个订单可以有许多订单行。一个订单也可以在行上具有不同的ProductCategories。该表如下所示:
OrderNo ProductCategory O1 Cat1 O1 Cat2 O1 Cat3 O2 Cat1 O3 Cat4
我想要一个计算列" CalcC"如果OrderNo存在Cat1,则返回1。我希望为OrderNo的所有行返回1。
我的结果表如下所示:
OrderNo ProductCategory CalcC O1 Cat1 1 O1 Cat2 1 O1 Cat3 1 O2 Cat1 1 O3 Cat4 0
如果有人可以用一些DAX语法帮助我实现这一点,我将非常感激。
谢谢。
答案 0 :(得分:0)
CalcC =
IF(
ISEMPTY(
CALCULATETABLE(
'FactOrder'
,ALLEXCEPT( 'FactOrder', 'FactOrder'[OrderNo] )
,'FactOrder'[ProductCategory] = "Cat1"
)
)
,0
,1
)
IF()是微不足道的。 ISEMPTY()检查表是否有0行或> 0行。 CALCULATETABLE()根据参数2-N中定义的过滤器上下文计算参数1中的表。 ALLEXCEPT()清除指定表中的上下文,仅在命名列上保留它。
我们的CALCULATETABLE()返回' FactOrder'只有[OrderNo]与调用行上下文中存在的相同。所有过滤器参数都以逻辑方式组合,因此除了将表限制为与调用行上下文共享[OrderNo]的表之外,我们还将其限制为[ProductCategory] =" Cat1"
如果该表为空,则返回0,否则返回1.