如何使用Power BI逐年找出销售额最高的产品?
在Power BI中逐年找出销售额最高产品的最优方法
先调整数据结构(关键第一步)
你的原始数据是宽表(产品作为列),这种结构不利于Power BI做分组统计。先在Power Query编辑器里把数据转成长表:
- 选中「年份」和「区域」列,右键选「逆透视其他列」
- 把自动生成的「属性」列改名为「产品」,「值」列改名为「销售额」
这样每一行对应一条「年份-区域-产品-销售额」的记录,后续计算会顺畅很多。
关于Null值的影响
Power BI的SUM、MAX这类聚合函数会自动忽略Null值,不会把它当成0算,所以正常情况下不会影响你的总销售额统计和最大值判断。如果确实需要把Null当成0处理,要么在Power Query里用「替换值」把Null换成0,要么在DAX里用COALESCE([销售额], 0)来转换。
用DAX实现年度Top产品统计
1. 基础度量值
先创建一个计算总销售额的基础度量:
总销售额 = SUM('销售数据'[销售额])
2. 标记年度Top1产品
如果要在表格里直接看到哪些产品是当年的Top1,用这个度量:
是否为年度Top1 = VAR 产品年度销售额 = CALCULATE([总销售额], ALLEXCEPT('销售数据', '销售数据'[年份], '销售数据'[产品])) VAR 年度最高销售额 = CALCULATE([总销售额], ALLEXCEPT('销售数据', '销售数据'[年份]), TOPN(1, ALL('销售数据'[产品]), [总销售额])) RETURN IF(产品年度销售额 = 年度最高销售额, "是", "否")
之后在可视化里,把「是否为年度Top1」作为筛选条件选「是」,就能只显示每年的Top产品。
3. 直接返回年度Top产品名称
如果要在卡片或表格里直接显示每年的Top产品名字(支持并列第一的情况),用这个度量:
年度Top产品 = VAR 年度最高额 = CALCULATE([总销售额], ALLEXCEPT('销售数据', '销售数据'[年份])) VAR 候选产品 = CALCULATETABLE( VALUES('销售数据'[产品]), FILTER(ALL('销售数据'[产品]), [总销售额] = 年度最高额) ) RETURN CONCATENATEX(候选产品, '销售数据'[产品], ", ")
如果当年有多个产品销售额并列第一,会用逗号把它们连起来显示。
4. 按区域+年份找Top产品
如果需要看每个区域每年的Top产品,修改一下度量里的上下文:
区域年度Top产品 = VAR 区域年度最高额 = CALCULATE([总销售额], ALLEXCEPT('销售数据', '销售数据'[年份], '销售数据'[区域])) VAR 候选产品 = CALCULATETABLE( VALUES('销售数据'[产品]), FILTER(ALL('销售数据'[产品]), [总销售额] = 区域年度最高额) ) RETURN CONCATENATEX(候选产品, '销售数据'[产品], ", ")
可视化小技巧
- 矩阵/表格:行放年份,列放产品,值放总销售额,再给总销售额加条件格式(比如用颜色突出每年的最大值)
- 卡片图+切片器:加个年份切片器,卡片图显示「年度Top产品」和对应的总销售额,切换年份就能看不同年份的结果
- 条形图:按年份分组,只显示各年Top1产品的销售额,直观对比各年Top产品的表现
内容的提问来源于stack exchange,提问作者Ibo
相关产品推荐
相关产品推荐

