Power BI中DAX代码实现工单最新有效状态提取的需求与问题
Power BI中DAX代码实现工单最新有效状态提取的需求与问题
你好,我来帮你搞定这个Power BI里提取工单最新有效状态的问题~先理清楚你的核心需求和现有代码的问题:
需求回顾
你手里的工单数据有大量重复的工单编号,想要生成一个汇总表,每个工单只显示最新的有效状态:
- 有效状态仅包含
Complete和Incomplete - 如果最新的记录状态是
As Per Lead Engineer Jobsheet,直接忽略这条,继续往前找最近的那条有效状态记录 - 比如你给的示例数据里,工单4507101最新的记录是As Per...,所以要跳过它,取下一条最近的
Complete状态
现有代码的问题
你原来写的DAX代码只是取了每个工单最新时间的状态,没有过滤无效状态,更不会在最新状态无效时往前追溯,所以才会出现不符合预期的结果。
解决方案:修正后的DAX代码
这里给你两种可行的写法,都能满足你的需求,选你觉得顺手的就行:
写法一:TOPN筛选法(直观易懂)
有效工单状态汇总 = SUMMARIZE( 'Table1 Data', 'Table1 Data'[Work Order No], "最新有效状态", VAR 当前工单 = 'Table1 Data'[Work Order No] // 先筛选当前工单下所有有效状态的记录,排除无效的As Per... VAR 筛选有效状态的工单记录 = FILTER( ALL('Table1 Data'), 'Table1 Data'[Work Order No] = 当前工单 && 'Table1 Data'[Status] IN {"Complete", "Incomplete"} ) // 对有效记录按结束时间从新到旧排序,取第一条 VAR 按结束时间降序取第一条 = TOPN( 1, 筛选有效状态的工单记录, 'Table1 Data'[Finish Time], DESC ) // 提取这条记录的状态值,如果没有有效记录返回自定义提示 RETURN IF( ISEMPTY(筛选有效状态的工单记录), "无有效状态", MAXX(按结束时间降序取第一条, 'Table1 Data'[Status]) ) )
写法二:RANKX排名法(适合熟悉排名逻辑的用户)
有效工单状态汇总_RANKX版 = // 先给所有有效记录按工单分组,按结束时间降序排名 VAR 有效记录排名表 = ADDCOLUMNS( FILTER('Table1 Data', 'Table1 Data'[Status] IN {"Complete", "Incomplete"}), "状态记录排名", RANKX( FILTER('Table1 Data', 'Table1 Data'[Work Order No] = EARLIER('Table1 Data'[Work Order No])), 'Table1 Data'[Finish Time],, DESC, DENSE ) ) // 筛选出每个工单排名第1的记录(最新有效状态),汇总成表 RETURN SUMMARIZE( FILTER(有效记录排名表, [状态记录排名] = 1), 'Table1 Data'[Work Order No], "最新有效状态", 'Table1 Data'[Status] )
额外说明
- 两种写法都会自动跳过所有
As Per Lead Engineer Jobsheet的记录,只在有效状态里找最新的那条 - 如果某个工单没有任何有效状态(全是As Per...),写法一里会返回
无有效状态,写法二则不会显示该工单,你可以根据自己的需求调整
备注:内容来源于stack exchange,提问作者Shak543
相关产品推荐
相关产品推荐

