如何按产地、产品、缺陷筛选最新2条生产缺陷数据并汇总成本?
解决方案
1. 先确认数据基础关联
- 如果产地信息未直接包含在生产缺陷数据表中,需确保缺陷表与存储「产地-产品对应关系」的表(比如生产基地对照表)已通过Product ID或产品类别字段正确关联,保证每条缺陷记录能准确匹配到所属产地。
2. 用DAX实现分组取TOP2+成本汇总
方法一:生成固定结果计算表
若需要一次性导出分组后的TOP2记录及总成本,使用以下DAX表达式创建计算表:
TOP2缺陷记录及总成本 = VAR 分组维度 = SUMMARIZE( '生产缺陷数据表', '生产缺陷数据表'[产地], '生产缺陷数据表'[产品], '生产缺陷数据表'[Defect] ) VAR 分组取TOP2 = ADDCOLUMNS( 分组维度, "最新2条记录", TOPN( 2, FILTER( '生产缺陷数据表', '生产缺陷数据表'[产地] = EARLIER('生产缺陷数据表'[产地]) && '生产缺陷数据表'[产品] = EARLIER('生产缺陷数据表'[产品]) && '生产缺陷数据表'[Defect] = EARLIER('生产缺陷数据表'[Defect]) ), '生产缺陷数据表'[生产日期], DESC ), "缺陷总成本", CALCULATE( SUM('生产缺陷数据表'[缺陷成本(USD)]), TOPN( 2, FILTER( '生产缺陷数据表', '生产缺陷数据表'[产地] = EARLIER('生产缺陷数据表'[产地]) && '生产缺陷数据表'[产品] = EARLIER('生产缺陷数据表'[产品]) && '生产缺陷数据表'[Defect] = EARLIER('生产缺陷数据表'[Defect]) ), '生产缺陷数据表'[生产日期], DESC ) ) ) RETURN 分组取TOP2
- 逻辑说明:先通过
SUMMARIZE生成所有唯一的「产地-产品-缺陷类型」组合,再用ADDCOLUMNS为每个组合筛选出最新2条记录,并计算对应成本总和;EARLIER用于锁定外层分组上下文,确保TOPN是在每个分组内筛选。
方法二:创建动态交互度量值
若需在报表中配合切片器动态展示,创建以下两个度量值:
(1)判断是否为分组内TOP2记录
是否为TOP2记录 = VAR 当前分组排名 = RANKX( FILTER( ALLSELECTED('生产缺陷数据表'), '生产缺陷数据表'[产地] = MAX('生产缺陷数据表'[产地]) && '生产缺陷数据表'[产品] = MAX('生产缺陷数据表'[产品]) && '生产缺陷数据表'[Defect] = MAX('生产缺陷数据表'[Defect]) ), MAX('生产缺陷数据表'[生产日期]), , DESC, DENSE ) RETURN IF(当前分组排名 <= 2, 1, 0)
- 使用方式:在可视化组件的筛选器中,将该度量值设置为「等于1」,即可仅显示每个分组的最新2条记录。
(2)分组TOP2缺陷总成本
TOP2缺陷总成本 = CALCULATE( SUM('生产缺陷数据表'[缺陷成本(USD)]), FILTER( ALLSELECTED('生产缺陷数据表'), VAR 当前分组排名 = RANKX( FILTER( ALLSELECTED('生产缺陷数据表'), '生产缺陷数据表'[产地] = EARLIER('生产缺陷数据表'[产地]) && '生产缺陷数据表'[产品] = EARLIER('生产缺陷数据表'[产品]) && '生产缺陷数据表'[Defect] = EARLIER('生产缺陷数据表'[Defect]) ), '生产缺陷数据表'[生产日期], , DESC, DENSE ) RETURN 当前分组排名 <= 2 ) )
- 作用:自动计算当前筛选上下文下,每个「产地-产品-缺陷类型」分组的最新2条记录成本总和。
3. 常见错误排查
- 未锁定分组上下文:直接使用
TOPN(2, '生产缺陷数据表', [生产日期], DESC)会取整个表的TOP2,而非每个分组内的,必须通过FILTER+EARLIER/MAX限定分组维度。 - 日期格式异常:确保「生产日期」字段为日期/时间类型,若为文本格式会导致排序逻辑错误。
- 重复日期处理:若多条记录生产日期相同,
RANKX的DENSE参数会让相同日期的记录排名一致,避免漏选;若需严格取2条,改用默认的SKIP排名即可。
内容的提问来源于stack exchange,提问作者NoviceatPBI
相关产品推荐
相关产品推荐

