DAX多条件COUNTROWS与LOOKUPVALUE:统计连续GREEN类型合同数量
统计当前及前置合同类型均为"GREEN"的合同数量解决方案
优先方案:基于FCT Contract的度量值实现
直接用DAX编写度量值,通过筛选和关联验证双条件,核心用COUNTROWS统计符合要求的合同数:
Count Green Contracts with Green Predecessor = VAR CurrentGreenContracts = CALCULATETABLE( 'FCT Contract', 'DIM Object'[Type] = "GREEN" ) VAR ValidContracts = FILTER( CurrentGreenContracts, VAR PrecedingID = RELATED('DIM Contract'[Preceeding Contract ID]) VAR PrecedingType = CALCULATE( SELECTEDVALUE('DIM Object'[Type]), 'DIM Contract'[Contract ID] = PrecedingID, REMOVEFILTERS('DIM Contract') ) RETURN PrecedingType = "GREEN" ) RETURN COUNTROWS(ValidContracts)
逻辑说明:
CurrentGreenContracts:先筛选出所有当前合同类型为GREEN的FCT Contract记录(通过FCT与DIM Object的关联实现类型校验)ValidContracts:在上述结果中进一步筛选,对每个合同:- 获取其前置合同ID(通过FCT与DIM Contract的关联)
- 用
CALCULATE和SELECTEDVALUE找到前置合同对应的类型(REMOVEFILTERS确保不受当前合同上下文干扰) - 验证前置合同类型也为GREEN
- 最终返回符合双条件的合同行数
备选方案:通过自定义列复用判断逻辑
如果需要多次使用"当前+前置均为GREEN"的判断逻辑,可以先在DIM Contract中创建自定义列,再基于列统计:
步骤1:在DIM Contract中添加自定义列
Is Green with Green Predecessor = VAR CurrentType = CALCULATE( SELECTEDVALUE('DIM Object'[Type]), RELATEDTABLE('FCT Contract') ) VAR PrecedingID = [Preceeding Contract ID] VAR PrecedingType = CALCULATE( SELECTEDVALUE('DIM Object'[Type]), 'DIM Contract'[Contract ID] = PreceedingID, RELATEDTABLE('FCT Contract') ) RETURN IF(CurrentType = "GREEN" && PrecedingType = "GREEN", TRUE(), FALSE())
步骤2:编写度量值统计
Count Green Contracts with Green Predecessor = COUNTROWS( FILTER( 'FCT Contract', RELATED('DIM Contract'[Is Green with Green Predecessor]) = TRUE() ) )
适用场景:
当报表中需要多次用到这个判断条件时,自定义列可以避免重复编写逻辑,但会增加模型的存储占用;纯度量值方案更轻量化,适合动态筛选场景。
内容的提问来源于stack exchange,提问作者EvitaSchaap
相关产品推荐
相关产品推荐

