在PowerBI中基于其他列值创建Calculated Column的方法求助
在PowerBI中创建「Time to Completed」计算列的实现方案
核心逻辑
针对每条记录按以下规则计算:
- 非Completed状态的行直接返回0;
- Completed状态的行:若为项目第一条Completed记录,或前一条记录已是Completed,则返回0;否则计算当前日期与上一条非Completed记录的月份间隔。
DAX计算公式
Time to Completed = VAR CurrentProject = [Project] VAR CurrentDate = [Reporting Date] VAR CurrentStatus = [Status] -- 筛选当前项目中早于当前日期的所有记录 VAR FilteredRecords = FILTER(ALL('你的表名'), '你的表名'[Project] = CurrentProject && '你的表名'[Reporting Date] < CurrentDate) -- 获取当前项目中最新的前一条记录的状态 VAR LastRecordStatus = MAXX(TOPN(1, FilteredRecords, '你的表名'[Reporting Date], DESC), '你的表名'[Status]) -- 获取当前项目中最后一条非Completed状态的记录日期 VAR LastNonCompletedDate = MAXX(FILTER(FilteredRecords, '你的表名'[Status] <> "Completed"), '你的表名'[Reporting Date]) RETURN IF( CurrentStatus <> "Completed", 0, IF( -- 处理「第一条Completed记录」或「前一条已是Completed」的情况 ISBLANK(LastRecordStatus) || LastRecordStatus = "Completed", 0, -- 计算月份间隔 DATEDIFF(LastNonCompletedDate, CurrentDate, MONTH) ) )
公式细节说明
- 变量初始化:捕获当前行的项目、日期、状态,为后续筛选计算提供上下文;
- 前序记录筛选:
FilteredRecords锁定当前项目中所有早于当前日期的历史记录; - 前一行状态判断:
LastRecordStatus提取前序记录中最新一条的状态,用来识别连续Completed的场景; - 非Completed记录定位:
LastNonCompletedDate找出前序记录中最后一条非Completed状态的日期; - 结果分支返回:
- 当前状态非Completed → 返回0;
- 满足「第一条Completed」或「前一行Completed」条件 → 返回0;
- 其余Completed状态行 → 计算两个日期的月份差并返回。
注意事项
- 替换公式中的
你的表名为实际数据集的表名称; - 确保
Reporting Date列是日期格式; - 状态值
"Completed"需与数据中的实际值完全匹配(注意大小写、空格); - 若存在同一项目同一日期多条记录的情况,需先对数据去重,保证每个项目每个日期仅一条记录。
内容的提问来源于stack exchange,提问作者tikkimasala
相关产品推荐
相关产品推荐

