DAX中USERELATIONSHIP多条件逻辑实现问题求助
DAX代码修正方案
错误根源
USERELATIONSHIP 是仅能作为CALCULATE函数筛选器参数的上下文切换工具,它不生成布尔值,因此不能嵌套在OR这类逻辑判断函数中——这就是你收到报错的原因。
实现需求的正确写法
要实现“应用Provider Index与Account Type DIM的关系,或Follower Index与Account Type DIM的关系”的逻辑,本质是分别计算两种关系上下文下的数值总和,再将结果相加。以下是两种高效的实现方式:
方式1:直接拆分计算
// 计算Provider关系匹配时的总和 CALCULATE( SUM('VOLUME FACT'[manual_opened_usd_volume]), USERELATIONSHIP('VOLUME FACT'[Manual Open Volume Index], 'Volume Type DIM'[Index]), USERELATIONSHIP('VOLUME FACT'[Provider Index], 'Account Type DIM'[id]) ) + // 计算Follower关系匹配时的总和 CALCULATE( SUM('VOLUME FACT'[manual_opened_usd_volume]), USERELATIONSHIP('VOLUME FACT'[Manual Open Volume Index], 'Volume Type DIM'[Index]), USERELATIONSHIP('VOLUME FACT'[Follower Index], 'Account Type DIM'[id]) )
方式2:用变量优化(减少重复计算)
VAR BaseCalculation = // 先定义基础求和逻辑(应用Manual Open Volume的关系) CALCULATE( SUM('VOLUME FACT'[manual_opened_usd_volume]), USERELATIONSHIP('VOLUME FACT'[Manual Open Volume Index], 'Volume Type DIM'[Index]) ) VAR ProviderContextSum = // 在Provider关系上下文下计算基础值 CALCULATE(BaseCalculation, USERELATIONSHIP('VOLUME FACT'[Provider Index], 'Account Type DIM'[id])) VAR FollowerContextSum = // 在Follower关系上下文下计算基础值 CALCULATE(BaseCalculation, USERELATIONSHIP('VOLUME FACT'[Follower Index], 'Account Type DIM'[id])) RETURN // 合并两种情况的结果,实现"或"的逻辑 ProviderContextSum + FollowerContextSum
注意事项
如果存在同一行数据同时匹配Provider Index和Follower Index关系的情况,上述写法会将该行数值重复计算。若需避免重复,可改用SUMX遍历行数据并做匹配判断:
CALCULATE( SUMX( 'VOLUME FACT', VAR IsProviderMatch = NOT(ISBLANK(RELATED('Account Type DIM'[id]))) VAR IsFollowerMatch = NOT(ISBLANK( CALCULATE(RELATED('Account Type DIM'[id]), USERELATIONSHIP('VOLUME FACT'[Follower Index], 'Account Type DIM'[id])) )) RETURN IF(IsProviderMatch || IsFollowerMatch, 'VOLUME FACT'[manual_opened_usd_volume], 0) ), USERELATIONSHIP('VOLUME FACT'[Manual Open Volume Index], 'Volume Type DIM'[Index]) )
内容的提问来源于stack exchange,提问作者Kartik Singh
相关产品推荐
相关产品推荐

