使用DAX构建含上一条评论的表格问题求助
商机评论最新及上一条记录提取问题
问题说明
现有一张存储商机评论的表格OptComment,结构如下:
- Index:唯一索引
- OptID:商机标识ID
- CommentDate:评论日期
- Comment:评论文本
需要构建虚拟表格,仅展示每个商机的最新评论记录(日期、内容)以及上一条评论的日期,但现有DAX代码无法正常运行。
源表格示例
| Index | OptID | CommentDate | Comment |
|---|---|---|---|
| 1 | 1 | Jan 1 2000 | Comment 1 Op1 |
| 2 | 1 | Jan 5 2000 | Comment 2 Op1 |
| 3 | 1 | Jan 11 2000 | Comment 3 Op1 |
| 4 | 2 | Jan 1 2000 | Comment 1 Op2 |
| 5 | 2 | Jan 3 2000 | Comment 2 Op2 |
| 6 | 2 | Jan 5 2000 | Comment 3 Op2 |
现有错误DAX代码
Table = SUMMARIZE(optComment, OptComment[OptID], OptComment[Comment], "Previous Comment Date", ( VAR mxDt = MAX(optComment[CommentDate]) VAR stld = CALCULATE( MAX('OptComment'[CommentDate]), FILTER( OptComment, OptComment[CommentDate] < mxDt) ) RETURN stld ))
期望输出结果
| OptID | Last CommentDate | Latest Comment | Previous Comment Dt |
|---|---|---|---|
| 1 | Jan 11 2000 | Comment 3 Op1 | Jan 5 2000 |
| 2 | Jan 5 2000 | Comment 3 Op2 | Jan 3 2000 |
问题分析与修正方案
原代码问题
原代码在SUMMARIZE中同时按OptID和Comment分组,导致每个商机的每条评论都会生成一行记录,无法实现按商机聚合的需求;且日期计算逻辑未正确限定在当前商机的范围内,结果不符合预期。
修正后的DAX代码
Latest_Previous_Comments = VAR Unique_OptIDs = VALUES(OptComment[OptID]) RETURN ADDCOLUMNS( Unique_OptIDs, "Last CommentDate", CALCULATE(MAX(OptComment[CommentDate])), "Latest Comment", VAR Max_Date = CALCULATE(MAX(OptComment[CommentDate])) RETURN CALCULATE(MAX(OptComment[Comment]), OptComment[CommentDate] = Max_Date), "Previous Comment Dt", VAR Max_Date = CALCULATE(MAX(OptComment[CommentDate])) RETURN CALCULATE(MAX(OptComment[CommentDate]), OptComment[CommentDate] < Max_Date) )
代码说明
- 先通过
VALUES(OptComment[OptID])获取所有唯一商机ID,确保每个商机只生成一行结果。 - 使用
ADDCOLUMNS为每个商机ID计算三个字段:Last CommentDate:当前商机的最新评论日期Latest Comment:匹配最新日期的评论内容Previous Comment Dt:当前商机中仅次于最新日期的上一条评论日期
内容的提问来源于stack exchange,提问作者Zeid S.
相关产品推荐
相关产品推荐

