如何为PowerBI中基于DAX的分类度量添加矩阵总计?
解决DAX分类度量的总计缺失问题
我有多个基于筛选条件的计数DAX度量(比如示例中的Blue度量),希望将这些度量按类别分组后在矩阵视觉中使用。目前通过创建度量类别表和分类度量实现了分组,但矩阵里分类、子分类及整体的总计都缺失,不想用额外添加总计字段的临时方法,寻求更优实现方案。
现有实现代码
示例度量
Blue = CALCULATE( COUNT(data[Full name]), FILTER(data, data[White/Blue] = "Blue") )
度量类别表
Measures categories = DATATABLE ( "Category", STRING, "Sub-Category", STRING, "Index", INTEGER, { { "Direct/Indirect", "Direct", 1}, { "Direct/Indirect", "Indirect", 2}, { "White/Blue", "White", 3}, { "White/Blue", "Blue", 4} } )
当前分类度量
Categories measure = VAR SelectedMeasure_ = SELECTEDVALUE('Measures categories'[Index]) RETURN IF(HASONEVALUE('Measures categories'[Index]), SWITCH( SelectedMeasure_, 1, [Direct], 2, [Indirect], 3, [White], 4, [Blue] ) )
优化实现方案
问题根源是当前度量仅在选中单个Index时返回值,总计场景下HASONEVALUE不成立,直接返回空。以下提供两种优化思路:
方案1:分层处理上下文逻辑
明确区分单个子分类、分类合计、整体总计三种场景,分别计算对应值:
Categories measure = VAR SelectedCategory = SELECTEDVALUE('Measures categories'[Category]) VAR SelectedSubCategory = SELECTEDVALUE('Measures categories'[Sub-Category]) VAR SelectedIndex = SELECTEDVALUE('Measures categories'[Index]) RETURN // 单个子分类(单Index):返回对应度量值 IF(NOT ISBLANK(SelectedIndex), SWITCH(SelectedIndex, 1, [Direct], 2, [Indirect], 3, [White], 4, [Blue] ), // 分类级别合计:累加该分类下所有子分类的度量值 IF(NOT ISBLANK(SelectedCategory), SWITCH(SelectedCategory, "Direct/Indirect", [Direct] + [Indirect], "White/Blue", [White] + [Blue] ), // 整体总计:累加所有度量值 [Direct] + [Indirect] + [White] + [Blue] ) )
方案说明
- 移除
HASONEVALUE判断,通过检查上下文选中值是否为空来区分层级 - 矩阵视觉会自动根据当前行的上下文(子分类/分类/总计)触发对应计算分支,无需额外字段
方案2:动态遍历上下文(更灵活)
适合度量数量较多的场景,无需硬编码合计逻辑,自动遍历当前上下文内的所有度量并累加:
Categories measure = VAR CurrentContext = SUMMARIZE('Measures categories', 'Measures categories'[Index]) VAR TotalValue = SUMX(CurrentContext, SWITCH(VALUES('Measures categories'[Index]), 1, [Direct], 2, [Indirect], 3, [White], 4, [Blue] ) ) RETURN TotalValue
方案说明
- 使用
SUMX遍历当前上下文选中的所有Index,自动累加对应度量值 - 新增度量时,只需在
SWITCH中添加新的Index映射即可,合计逻辑无需修改
内容的提问来源于stack exchange,提问作者Artemy Panin
相关产品推荐
相关产品推荐

