PowerBI按州分组筛选各TopN公司的实现方法咨询
实现PowerBI中按州分组的TopN公司筛选
你需要的是每个州独立计算TopN公司,但现有代码是对单条记录的Amount排名,而非按公司在州内的总金额排名——原数据中每个公司有多行记录,得先合计每个公司在对应州的总金额,再做排名,这是解决问题的核心。
方案一:用计算列实现
先计算每个公司在州内的总金额,再基于该值完成排名:
- 创建计算列
公司州内总金额,用于统计对应州内某公司的所有金额总和:
公司州内总金额 = CALCULATE( SUM(DataTable[Amount]), ALLEXCEPT(DataTable, DataTable[State], DataTable[Company]) )
该函数会保留当前行的State和Company上下文,只计算该公司在对应州的金额总和。
- 创建排名计算列
州内公司排名:
州内公司排名 = VAR 当前州 = DataTable[State] RETURN RANKX( FILTER(DataTable, DataTable[State] = 当前州), DataTable[公司州内总金额], , DESC, -- 按总金额降序,金额高的公司排前面 DENSE -- 密集排名,相同总金额的公司排名一致 )
- 应用筛选:在矩阵视觉的筛选器中,设置
州内公司排名 <= 3,即可得到每个州的Top3公司。
方案二:用度量值(Measure)实现(更灵活)
如果不想创建计算列,用度量值动态计算排名,适配数据频繁更新的场景:
- 创建度量值
公司州内总金额度量,自动按当前上下文计算公司总金额:
公司州内总金额度量 = SUM(DataTable[Amount])
- 创建排名度量值
州内公司排名度量:
州内公司排名度量 = VAR 当前州 = SELECTEDVALUE(DataTable[State]) VAR 当前公司总金额 = [公司州内总金额度量] RETURN RANKX( CALCULATETABLE( VALUES(DataTable[Company]), DataTable[State] = 当前州 ), [公司州内总金额度量], 当前公司总金额, DESC, DENSE )
- 应用筛选:将
州内公司排名度量拖入视觉筛选器,设置值<=3即可生效。
关于Type列的说明
Type列属于Company下的子层级,只要矩阵的行结构是State -> Company -> Type,上述两种方案都能正常工作——排名基于Company在州内的总金额,Type只会影响下一层级的明细展示,不会干扰排名逻辑。
内容的提问来源于stack exchange,提问作者BruceWayne
相关产品推荐
相关产品推荐

