Power BI多子分类下按产品最新状态计数的DAX方案
Power BI DAX 子分类维度最新状态产品计数实现方案
核心计数规则对齐需求:
- 按
SubCategory + Product粒度分组,单产品在单个子分类下仅取CalcColumn值最大的记录作为该子分类下的最新状态 - 单产品在某子分类下的最新状态
CalcColumn值需等于该产品在当前筛选范围内的全局最大CalcColumn值,才计入该子分类计数(匹配PRD1仅计入xyz、PRD5同时计入abc和xyz的示例规则) - 计算逻辑完全响应报表切片器的筛选上下文,选中任意Category/SubCategory值后结果自动更新
具体实现
直接在数据表上新建如下度量值即可,无需预创建计算列:
ProductCount = // 继承切片器筛选范围,排除未选中的数据 VAR SelectedData = ALLSELECTED('SalesData') // 计算当前筛选范围内每个产品的全局最大CalcColumn值 VAR ProductGlobalMax = ADDCOLUMNS( VALUES('SalesData'[Product]), "@MaxVal", CALCULATE(MAX('SalesData'[CalcColumn]), SelectedData) ) // 计算每个子分类+产品组合下的子分类内最大CalcColumn值 VAR SubPrdMax = ADDCOLUMNS( SUMMARIZE( SelectedData, 'SalesData'[Category], 'SalesData'[SubCategory], 'SalesData'[Product] ), "@SubMaxVal", CALCULATE(MAX('SalesData'[CalcColumn])) ) // 筛选符合计数规则的有效分组:子分类内最大值等于产品全局最大值 VAR ValidGroups = FILTER( SubPrdMax, VAR CurrentPrd = [Product] VAR CurrentSubMax = [@SubMaxVal] VAR PrdGlobalMax = MAXX(FILTER(ProductGlobalMax, [Product] = CurrentPrd), [@MaxVal]) RETURN CurrentSubMax = PrdGlobalMax ) RETURN COUNTROWS(ValidGroups)
注意:将代码中所有
SalesData替换为你自己的数据源表名称即可。
调整说明
你可以根据实际业务需求灵活调整度量值逻辑:
- 如果需要过滤特定状态的产品,可在计算最大CalcColumn的
CALCULATE函数中增加State字段的筛选条件 - 如果不需要判断产品全局最大值、仅在子分类内取最新记录计数,删除ValidGroups中关于
PrdGlobalMax的判断逻辑,直接返回COUNTROWS(SubPrdMax)即可 - 度量值支持所有标准筛选交互,在表格/矩阵视觉对象中放入Category、SubCategory字段,再放入该度量值即可展示对应结果
内容的提问来源于stack exchange,提问作者Arpit Sharma
相关产品推荐
相关产品推荐

