PowerBI用DAX实现支持门店筛选的产品计数、占比及累计占比计算
Power BI 动态销售指标DAX实现方案
将STORE字段添加为报表切片器,表格可视化的行维度绑定PRODUCT字段,依次放入以下三个编写完成的度量值,即可实现筛选门店时所有指标动态更新的效果,解决快速度量值累计占比排序错误的问题。
1. Subtotal(产品销售记录小计)
统计当前筛选上下文下对应产品的销售记录条数,DAX代码如下:
Subtotal = COUNTROWS('Sales')
注:请将代码中
'Sales'替换为你实际的销售数据集表名
2. Percentage(单产品销量占当前上下文总销量比例)
计算当前产品销量占选中范围内总销量的占比,自动适配切片器筛选规则,DAX代码如下:
Percentage = DIVIDE( [Subtotal], CALCULATE([Subtotal], ALLSELECTED('Sales'[PRODUCT])), 0 )
将该度量值的数字格式设置为「百分比」即可正常展示。此处用ALLSELECTED而非ALL函数,是为了保留STORE切片器的筛选效果:比如选中NORTH门店时,分母仅计算NORTH门店的总销量,不会统计全门店的全量数据。
3. running %(按销量排序的累计占比)
快速度量值生成的累计占比排序错误,核心原因是默认按产品名称维度排序,未按实际销量值排序。以下DAX会自动按当前筛选上下文下的产品销量从高到低排序,计算累计占比:
running % = VAR CurrentProdSales = [Subtotal] VAR AllSelectedProd = ALLSELECTED('Sales'[PRODUCT]) VAR HigherOrEqualSalesProd = FILTER( AllSelectedProd, CALCULATE([Subtotal]) >= CurrentProdSales ) VAR CumulativeVal = CALCULATE([Subtotal], HigherOrEqualSalesProd) VAR TotalVal = CALCULATE([Subtotal], AllSelectedProd) RETURN DIVIDE(CumulativeVal, TotalVal, 0)
同样将该度量值格式设置为「百分比」即可。
效果校验
- 无任何筛选时:表格展示所有产品的销售记录数、全量占比、按全量销量排序的累计占比,最终累计值为100%
- 筛选NORTH门店时:表格自动过滤仅展示该门店有销售记录的AAA、BBB两款产品,三个指标全部基于NORTH门店的销售数据重新计算,累计占比也会按照该门店下的产品销量重新排序累加,不会沿用全量数据的排序逻辑
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

