PowerBI中制作按月聚合日期的Stack column chart问题
堆叠柱状图实现方案(按月聚合统计Yes计数)
1. 先把宽表数据转成标准长格式
如果你的数据是多列对应不同项目的日期和Yes/No状态(比如项目A日期、项目A是否Yes、项目B日期、项目B是否Yes这种结构),首先需要把数据整合成三列:项目类型、日期、是否Yes,方便后续统计。
用Python pandas处理的示例代码
import pandas as pd # 模拟你的原始宽表数据 raw_df = pd.DataFrame({ "项目A日期": ["2023-01-05", "2023-01-12", "2023-02-03"], "项目A是否Yes": ["Yes", "No", "Yes"], "项目B日期": ["2023-01-08", "2023-02-10", "2023-02-15"], "项目B是否Yes": ["Yes", "Yes", "No"] }) # 拆分每个项目的数据并统一列名 df_a = raw_df[["项目A日期", "项目A是否Yes"]].rename(columns={"项目A日期": "日期", "项目A是否Yes": "是否Yes"}) df_a["项目类型"] = "项目A" df_b = raw_df[["项目B日期", "项目B是否Yes"]].rename(columns={"项目B日期": "日期", "项目B是否Yes": "是否Yes"}) df_b["项目类型"] = "项目B" # 合并成一张长表,去掉空行 long_df = pd.concat([df_a, df_b]).dropna()
用Excel Power Query处理的步骤
- 选中数据区域,点击「数据」选项卡的「从表格/区域」进入Power Query编辑器
- 选中所有项目日期列,点击「转换」选项卡的「逆透视列」→「逆透视其他列」
- 手动修改列名:把「属性」列拆分为「项目类型」和「字段」(比如用「拆分列」按分隔符拆分,假设列名是「项目A日期」,拆成「项目A」和「日期」)
- 重新透视,把「字段」列的「日期」和「是否Yes」转成单独列,最终得到
项目类型、日期、是否Yes三列 - 点击「关闭并上载」导出处理后的数据
2. 按月聚合统计Yes的数量
把日期转换成月份维度,再按月份和项目类型分组统计Yes的次数。
Python pandas实现
# 转换日期格式并提取月份(格式为YYYY-MM) long_df["日期"] = pd.to_datetime(long_df["日期"]) long_df["月份"] = long_df["日期"].dt.to_period("M") # 筛选Yes记录,按月份和项目类型统计数量 agg_result = long_df[long_df["是否Yes"] == "Yes"].groupby(["月份", "项目类型"]).size().unstack(fill_value=0)
Excel实现
- 在处理后的长表中添加辅助列,输入公式
=TEXT(日期,"YYYY-MM")提取月份 - 插入数据透视表:行选择「月份」,列选择「项目类型」,值选择「是否Yes」并设置值字段设置为「计数」,同时在值筛选里只保留「Yes」
- 透视表生成后就是每月各项目的Yes计数
3. 绘制堆叠柱状图
Python matplotlib绘制
import matplotlib.pyplot as plt # 绘制堆叠柱状图 agg_result.plot(kind="bar", stacked=True, figsize=(10, 6)) plt.title("每月各项目Yes计数堆叠柱状图") plt.xlabel("月份") plt.ylabel("Yes计数") plt.xticks(rotation=45) plt.legend(title="项目类型") plt.tight_layout() plt.show()
Excel绘制
- 选中透视表的数据区域(包含月份、各项目的Yes计数)
- 点击「插入」选项卡的「柱状图」→「堆积柱形图」
- 调整图表标题、坐标轴标签、图例位置等样式即可
内容的提问来源于stack exchange,提问作者user13320137
相关产品推荐
相关产品推荐

