Power BI中按县与年份提取数值最大的Description记录
解决Power BI中按县和年份筛选数值最大描述的问题
针对你的需求(每个县、每个年份保留对应年份数值最大的Description条目),结合你有SQL经验的背景,以下是具体实现步骤:
1. 先将宽表转为长表(逆透视)
原表是宽表结构(年份作为列),DAX更适合处理长表,这一步类似SQL中的UNPIVOT操作:
- 打开Power Query编辑器,选中
County和Description列 - 右键点击选择逆透视其他列,生成两个新列:
年份:原年份列的列名(如1969、1970...)数值:对应年份列的单元格数值
- 关闭并应用,得到长表结构:
County | Description | 年份 | 数值
2. 方法一:创建计算表存储结果
如果需要生成固定的结果表,可使用DAX创建计算表,逻辑对应SQL中ROW_NUMBER() OVER(PARTITION BY...)筛选排名第一的行:
县年度最大描述结果表 = VAR 带分组排名的表 = ADDCOLUMNS( '逆透视后的长表', "@排名", RANKX( -- 按县和年份分组 FILTER('逆透视后的长表', '逆透视后的长表'[County] = EARLIER('逆透视后的长表'[County]) && '逆透视后的长表'[年份] = EARLIER('逆透视后的长表'[年份]) ), '逆透视后的长表'[数值], , DESC, -- 按数值降序排名 DENSE -- 并列数值保留相同排名,若要仅取一条可省略此参数 ) ) -- 筛选排名为1的行,提取所需字段 RETURN SELECTCOLUMNS( FILTER(带分组排名的表, [@排名] = 1), "County", [County], "年份", [年份], "最大数值的Description", [Description], "对应数值", [数值] )
- 若存在多个
Description对应相同最大数值,使用DENSE会保留所有并列行;若只需任意一条,去掉DENSE参数即可。
3. 方法二:用度量值直接在地图中使用
如果不需要生成固定表,而是在地图视觉对象中动态展示(结合年份切片器),可创建度量值:
当前年度最大描述 = VAR 当前选中县 = SELECTEDVALUE('逆透视后的长表'[County]) VAR 当前选中年份 = SELECTEDVALUE('逆透视后的长表'[年份]) VAR 该县当年最大数值 = MAXX( FILTER('逆透视后的长表', [County] = 当前选中县 && [年份] = 当前选中年份 ), [数值] ) -- 返回对应最大数值的Description,若有并列则取字母排序最大的 RETURN CALCULATE( MAX('逆透视后的长表'[Description]), FILTER('逆透视后的长表', [County] = 当前选中县 && [年份] = 当前选中年份 && [数值] = 该县当年最大数值 ) )
- 使用时:将
County拖到地图的位置字段,年份拖到切片器,对应数值拖到颜色编码字段,当前年度最大描述拖到数据标签即可。
内容的提问来源于stack exchange,提问作者Vijay Tripathi
相关产品推荐
相关产品推荐

