Dax 不使用计算的不同计数

Dax 不使用计算的不同计数,dax,Dax,我遇到了这个DAXmeasure: # CustMultProds = COUNTROWS( FILTER( Customer, CALCULATE( DISTINCTCOUNT( Sales[ProductKey] ) ) >= 2 ) ) 我非常了解它的工作原理-它在过滤器函数中迭代客户,然后将此迭代器创建的行上下文转换为过滤器上下文,以便它能够从销售表中获取不同产品的数量 我想知道是否可以不使用CALCULATE重新编写度量值?

我遇到了这个
DAX
measure:

# CustMultProds = 
COUNTROWS( 
    FILTER(
        Customer,
        CALCULATE( DISTINCTCOUNT( Sales[ProductKey] ) ) >= 2
    ) 
)
我非常了解它的工作原理-它在
过滤器
函数中迭代
客户
,然后将此迭代器创建的行上下文转换为过滤器上下文,以便它能够从
销售
表中获取不同产品的数量

我想知道是否可以不使用
CALCULATE
重新编写度量值?我使用了
RELATEDTABLE
,但不确定如何从每个相关表中提取不同的ProductKey:

# CustMultProds = 
COUNTROWS( 
    FILTER(
        Customer,
        RELATEDTABLE (Sales) 
        ...
        ...
    ) 
)

这是使用
RELATEDTABLE
实现测量的一种可能方式。但每个客户仍然会发生一次上下文转换,因为
RELATEDTABLE
执行上下文转换

#CustMultProds=
计数行(
滤器(
顾客
VAR客户销售=
相关表格(销售)
返回
MAXX(客户销售、销售[ProductKey])
MINX(客户销售、销售[ProductKey])
)
)
这是利用RELATEDTABLE编写度量值的另一种方法,可以对其进行修改以处理不同数量的不同产品

#CustMultProds=
计数行(
滤器(
顾客
COUNTROWS(汇总(相关表格(销售)、销售[ProductKey])>=2
)
)

这是另一种可能的实现,不需要
计算
相关表
。 但它会为每个客户扫描整个销售表一次,因此,即使它不执行上下文转换,我也希望它会更慢

#CustMultProds=
计数行(
滤器(
顾客
VAR销售产品=
汇总(销售、销售[CustomerKey]、销售[ProductKey])
返回
计数行(
过滤器(SalesProduct,Sales[CustomerKey]=客户[CustomerKey])
) >= 2
)
)

注意:RELATEDTABLE()在@sergiom执行上下文转换感谢这些额外的信息-对我来说,焦点只是一个没有计算的备选方案-我已经更改了帖子的标题,不包括上下文转换。逻辑性很好-谢谢。选项2非常接近我的方向-谢谢