求Power BI/DAX实现度量值列的累计运行总计方案
Power BI 温度数据累计分布(运行总计百分比)实现方案
嘿,卡了三天确实够闹心的——按日期排名肯定走偏了,累计分布图的核心是按温度值本身的大小来累计,跟日期半毛钱关系都没有!咱们一步步来把这个搞定:
第一步:确认基础度量值正确性
先确保你用来计算单温度占比的基础度量是对的,要是基础错了,后面全白搭:
- 统计单温度出现次数:
温度出现次数 = COUNT('你的温度表名'[温度]) - 计算全局总记录数(如果需要支持切片器筛选,把
ALL改成ALLSELECTED):总温度记录数 = CALCULATE(COUNT('你的温度表名'[温度]), ALL('你的温度表名')) - 单温度占总记录的百分比:
用温度占比 = DIVIDE([温度出现次数], [总温度记录数], 0)DIVIDE是为了避免除以0的错误,最后那个0是除数为0时的默认值。
第二步:创建温度维度表(关键!)
直接用原表的温度列做累计很容易出上下文冲突,最好建一个去重的温度维度表,用来做排序和筛选:
- 切换到「建模」选项卡,点击「新建表」
- 输入以下DAX生成去重温度表:
温度维度表 = SUMMARIZE('你的温度表名', '你的温度表名'[温度]) - 给这个表的「温度」列设置升序排序(右键列 → 排序 → 升序)
- 到「模型」视图,把原表的「温度」字段拖到维度表的「温度」字段上,建立一对多关系
第三步:制作累计百分比度量值
这一步是核心,用CALCULATE+FILTER筛选出所有小于等于当前温度的记录,累加它们的占比:
累计温度占比 = CALCULATE( [温度占比], FILTER( ALL('温度维度表'[温度]), '温度维度表'[温度] <= MAX('温度维度表'[温度]) ) )
ALL('温度维度表'[温度]):用来忽略当前行的温度上下文,确保能遍历所有温度值'温度维度表'[温度] <= MAX('温度维度表'[温度]):筛选出小于等于当前可视化中温度值的所有温度CALCULATE:把筛选后的上下文应用到「温度占比」度量上,求和得到累计值
第四步:可视化设置
- 新建一个折线图(或者面积图,看你偏好)
- X轴选择「温度维度表」里的「温度」字段
- Y轴选择刚刚做的「累计温度占比」度量
- 如果想同时看单温度的分布,可以把「温度占比」也拖到Y轴,把它的可视化类型改成柱状图,这样就能看到柱状的单温度占比+折线的累计占比,完美呈现累计分布
关于你之前的排名报错
你之前按日期排名完全搞错了方向——累计分布是看「低于某个温度的记录占总记录的比例」,所以必须按温度值从小到大来累计,而不是按时间顺序。用温度维度表来做排序和筛选,就能避开之前的排名错误问题。
内容的提问来源于stack exchange,提问作者Lasse Kildemoes
相关产品推荐
相关产品推荐

