Power BI中用DAX对比筛选表 按Case_ID判断StatusA与StatusB先后顺序
Power BI 案件状态先后对比实现方案
前置配置
- 首先确认表关系:建立
Cases[Case_ID]与Statuses[Case_ID]的一对多关联(Statuses表默认包含Case_ID字段,用于关联对应案件)。
方案一:Cases表新增计算列(适合静态固化结果,支持后续切片筛选)
直接在Cases表新建计算列,输入以下DAX公式:
更早发生的状态 = // 提取当前案件StatusA对应的序号 VAR StatusA_序号 = LOOKUPVALUE(Statuses[Status_Number], Statuses[Case_ID], [Case_ID], Statuses[Status_Type], "StatusA") // 提取当前案件StatusB对应的序号 VAR StatusB_序号 = LOOKUPVALUE(Statuses[Status_Number], Statuses[Case_ID], [Case_ID], Statuses[Status_Type], "StatusB") RETURN SWITCH( TRUE(), // 两个状态都不存在返回空 ISBLANK(StatusA_序号) && ISBLANK(StatusB_序号), BLANK(), // 仅存在StatusB返回StatusB ISBLANK(StatusA_序号), "StatusB", // 仅存在StatusA返回StatusA ISBLANK(StatusB_序号), "StatusA", // 序号更小的状态更早发生 StatusA_序号 < StatusB_序号, "StatusA", "StatusB" )
该公式完全适配业务规则:同一个Case下每个状态仅出现一次,LOOKUPVALUE不会返回多值错误,测试示例中Case345677返回StatusA,Case345678返回StatusB,符合预期。
方案二:新建度量值(适合动态场景,可随切片器筛选条件变化)
如果需要支持动态切换对比的状态类型,可使用度量值实现:
更早发生的状态 = VAR 当前选中案件 = SELECTEDVALUE(Cases[Case_ID]) VAR StatusA_序号 = CALCULATE(MAX(Statuses[Status_Number]), Statuses[Status_Type] = "StatusA") VAR StatusB_序号 = CALCULATE(MAX(Statuses[Status_Number]), Statuses[Status_Type] = "StatusB") RETURN SWITCH( TRUE(), ISBLANK(StatusA_序号) && ISBLANK(StatusB_序号), BLANK(), ISBLANK(StatusA_序号), "StatusB", ISBLANK(StatusB_序号), "StatusA", StatusA_序号 < StatusB_序号, "StatusA", "StatusB" )
效果展示
在表格视觉对象中拖拽Cases[Case_ID]和上述创建的计算列/度量值,即可直接得到按Case_ID分组的对比结果。如果后续需要对比其他状态,仅需修改公式中对应Status_Type的文本值即可。
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

