【综合实战】实战:销售数据→分析→汇报一条龙
摘要:从一份粗糙的销售 Excel → Power Query 清洗 → Power BI 建模做 DAX 分析 → 导出图表/数据 → AI 一键生成汇报 PPT。整套跑通 30 分钟,DAX 公式真实可复制。
一、痛点引入
周一早上 9 点,老板在群里甩一句话:"上周华东区销售情况怎么样?这周五给我个汇报。"
你摊开手边的 Excel,大概是这么个场景:
- 一份从 ERP 导出来的
销售明细_2025.xlsx,3 万行,列名全是英文缩写(cust_id、prod_sku、amt、region_cd),还有一堆空白行、合并单元格、日期格式混着"2025/10/1"和"2025-10-01"两种写法; - 另一份
产品主数据.xlsx和一份客户主数据.xlsx,跟销售明细靠"产品编号"和"客户编号"关联,你得手动 VLOOKUP 出来; - 老板想要的是:总销售额、同比增长、Top 10 产品、各区域占比,最后塞进 PPT。
如果纯手撸,你大概的剧本是这样:先花 30 分钟在 Excel 里清洗数据(删空行、改格式、补列)→ 花 1 小时做透视表(产品、区域、时间三个维度各做一遍)→ 把透视表数据手动复制到 PPT,每页塞一张柱状图、改改配色 → 一份"看起来像样"的汇报至少 3-4 小时。更痛苦的是,数据每更新一次,所有步骤都得重来一遍。
这篇文章就帮你把这条流水线压缩到 30 分钟左右,而且数据更新时只刷新、几乎不返工。咱们串 5 个工具:
Excel(原始数据)→ Power Query(数据清洗,"ETL 工具"里的 T 转换步骤)→ Power BI(建模 + DAX 分析 + 可视化)→ 截图 / 导出数据(搬运图表)→ AI 工具(一键生成 PPT 草稿)。其中 Power BI 是主战场,DAX 和 Power Query 是硬核知识点。
你需要先知道几个术语
第一次出现都加了人话解释,后面就不重复:
- Power Query = Excel 和 Power BI 自带的"数据清洗流水线",可视化点点鼠标,背后是 M 语言(一种类 SQL 的函数式语言,描述"从哪取、怎么转、放到哪")。
- Power BI = 微软的商业智能工具,把数据"建模 + 出图 + 出报表"一条龙搞定;可以做交互式仪表盘。
- DAX(Data Analysis Expressions)= Power BI 里专门写公式的语言,公式会随用户筛选自动重算(比如点了"只看 10 月",整个看板数字一起变)。
- 度量值(Measure)= DAX 写出来的、能跟着筛选上下文变化的"动态数字",和"计算列"(一行一算、写死在表里)不同。
- Copilot = 微软的 AI 助手,集成在 Power BI / PowerPoint / Excel 里,能根据你的话生成草稿。
二、目标产出
照着做完,你能拿到 4 样东西:
- 一个 Power Query 清洗脚本(
.pq或.txt):从原始 Excel 一键完成"去空行 + 改类型 + 合表 + 出规范表",每周新数据来了只刷新一次。 - 一个 Power BI 数据模型(
.pbix):包含 3 张表(销售明细、产品、客户)+ 1 张日期表,关系图清晰。 - 7 个核心 DAX 度量值:总销售额、订单数、客单价、同比增长、累计销售、Top 10 排名。全部真实可运行,复制即用。
- 一份 AI 生成的汇报 PPT(
.pptx,8 页):封面 + 关键指标卡 + 区域分布 + 产品 Top 10 + 趋势分析 + 结论 + Q&A。
前置条件
| 项目 | 最低版本 | 说明 |
|---|---|---|
| Excel | 2016 / Microsoft 365 | 用来装 Power Query 和导出数据 |
| Power BI Desktop | 2024 年 8 月版及以上 | 建模、写 DAX、出图;微软官方免费下载 |
| PowerPoint | 2019 / Microsoft 365 | 装 Copilot / 用 AI 工具生成草稿 |
| AI 工具 | 任意 | 通义千问、Kimi、ChatGPT、文心一言都行;本文示例用 Copilot + 通义千问 |
| 原始数据 | 3 份 Excel | 销售明细 / 产品主数据 / 客户主数据 |
关于 Copilot 的能力边界(重要,先看):Power BI 的 Copilot 2024 年起在 Fabric / Premium 容量(PPU 也算) 下才能用全部功能,免费版 Power BI Desktop 用不了 Copilot 自动写 DAX 的功能。本文的 DAX 全部手写,不依赖 Copilot,照着复制就能跑。Copilot for Microsoft 365 在 PowerPoint 里能"根据 Word 文档生成 PPT 草稿",但能否直接读取 Power BI 截图再生成 PPT——目前不能保证,稳妥做法是手动截图后让 AI 看图生成。
三、案例实战
咱们用一家虚构的"快消品公司"做案例,跑一遍整条流水线。所有文件名、列名、数据都是真实可复现的,你拿自己的数据按字段映射替换就行。
第一步:准备原始 Excel 数据(5 分钟)
打开 Excel,建 3 个文件(或用公司现有数据),放文件夹 C:\Sales_Data\:
销售明细_2025.xlsx(主表,约 3 万行)
| 列名(英文原样保留) | 人话 | 样例 |
|---|---|---|
| order_date | 下单日期 | 2025-10-15 |
| order_id | 订单号 | SO20251015001 |
| cust_id | 客户编号 | C0001 |
| prod_sku | 产品编号 | SKU001 |
| qty | 数量 | 10 |
| unit_price | 单价 | 89.5 |
| amt | 销售金额 | 895 |
| region_cd | 区域编码 | EAST |
产品主数据.xlsx
| prod_sku | product_name | category |
|---|---|---|
| SKU001 | 矿泉水 550ml | 饮料 |
| SKU002 | 花生米 200g | 零食 |
客户主数据.xlsx
| cust_id | cust_name | cust_type |
|---|---|---|
| C0001 | 上海大润发 | KA 客户 |
| C0002 | 北京物美 | KA 客户 |
关键点:销售明细的列名故意保留英文缩写(ERP 导出来啥样就啥样),后面 Power Query 统一改中文。这比"先在 Excel 里改好再导入"省一倍时间——改名的活儿让 Power Query 干。
第二步:用 Power Query 清洗数据(10 分钟)
打开 Power BI Desktop → 点顶部 "主页" → "获取数据" → "Excel 工作簿" → 选 销售明细_2025.xlsx → 在导航器里勾 销售明细$sheet → 点 "转换数据"。
这一步会进入 Power Query 编辑器,整个界面分三栏:左栏是查询列表、中栏是数据预览、右栏是"应用的步骤"(每改一次会自动加一步)。
2.1 销售明细的清洗步骤
按下面顺序操作,每一步"应用的步骤"里都会自动生成一行(这就是 Power Query 的精髓——所有操作变成可重放的步骤,下次新数据来了点"刷新"就重跑一遍):
- 提升标题行:
主页→将第一行用作标题(自动生成#"Promoted Headers") - 改列类型:选中
qty / unit_price / amt三列 →转换→数据类型→小数;选order_date→数据类型→日期 - 删除空白行和错误行:
主页→删除行→删除空行(自动生成#"Removed Empty Rows") - 过滤脏数据:点
region_cd列的下拉箭头 → 取消勾选null和(null) - 改列名为中文:双击列名依次改名
order_date → 下单日期、cust_id → 客户编号、prod_sku → 产品编号、qty → 数量、unit_price → 单价、amt → 销售金额、region_cd → 区域编码、order_id → 订单号
改完后,点左栏 "高级编辑器",你能看到 Power Query 生成的 M 语言代码(M 语言 = Power Query 背后的脚本语言,类 SQL 的函数式风格),长这样:
powerquery-mlet // 1. 从 Excel 文件读销售明细 sheet 源 = Excel.Workbook(File.Contents("C:\Sales_Data\销售明细_2025.xlsx"), null, true), 销售明细_sheet = 源{[Item="销售明细",Kind="Sheet"]}[Data], // 2. 第一行提升为标题 提升的标题 = Table.PromoteHeaders(销售明细_sheet, [PromoteAllScalars=true]), // 3. 改列类型:日期、数字、文本 更改的类型 = Table.TransformColumnTypes(提升的标题, { {"order_date", Date.Type}, {"order_id", type text}, {"cust_id", type text}, {"prod_sku", type text}, {"qty", Int64.Type}, {"unit_price", Number.Type}, {"amt", Number.Type}, {"region_cd", type text} }), // 4. 去空行 + 过滤无效区域 删除的空行 = Table.SelectRows(更改的类型, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))), 过滤的行 = Table.SelectRows(删除的空行, each [region_cd] <> null and [region_cd] <> "") in 过滤的行
关键点:这段 M 代码你不用手写,Power Query 编辑器点点鼠标就会自动生成。但看懂这段代码很重要——因为下次字段变了、文件路径变了,你可以直接改代码,比点鼠标快 10 倍。建议把这段保存到
sales_fact.pq文件里做备份。
2.2 产品和客户的清洗(简单版)
产品和客户主数据一般很干净,最多两步:提升标题 + 改类型。然后 主页 → 关闭并应用,回到 Power BI 主界面。
2.3 关键一步:建立关系(Relationships)
回到 Power BI 主界面,左栏点 "模型视图"(图标是三个方块连成线)。你会看到 3 张表。拖线建关系:
销售明细[产品编号]→产品主数据[prod_sku](多对一,多 = 销售明细)销售明细[客户编号]→客户主数据[cust_id](多对一)- 卡片筛选方向勾 "单向"(筛选从"一"侧流向"多"侧:主数据 → 销售明细,箭头指向销售明细/事实表那侧)
坑点预警:建关系前先确保两表的关联列数据类型一致(都是文本),不然会建不上。如果那条线是实线,说明是活动关系(生效中);虚线表示非活动关系(没生效,需在"编辑关系"里勾选"将此关系保持活动状态")——看到虚线别急着用,先把它激活。
2.4 建一张独立的"日期表"(必做)
时间智能(同比、累计、本年累计)必须有一张独立的日期表(Date Table)——这是 DAX 时间函数的"标准日历"。点 主页 → 表 → 新建表,输入:
daxDate = CALENDAR(DATE(2025,1,1), DATE(2025,12,31))然后给日期表加 3 个计算列:
daxYear = YEAR('Date'[Date])
Month = MONTH('Date'[Date])
YearMonth = FORMAT('Date'[Date], "YYYY-MM")最后让日期表和销售明细建关系:销售明细[下单日期] → Date[Date]。
关键点:日期表必须标记为"日期表"——点日期表 → 上方菜单
表工具→标记为日期表→ 选Date列。不标记的话,SAMEPERIODLASTYEAR、TOTALYTD这些时间函数会报错或算错。
第三步:写 DAX 度量值(10 分钟)
打开 Power BI 主界面左侧 "数据视图" → 选中 销售明细 表 → 上方菜单 表工具 → 新建度量值。下面 7 个度量值挨个复制:
1. 总销售额(最基础的 SUM)
dax总销售额 = SUM('销售明细'[销售金额])2. 订单数(数行数,不是数某列)
dax订单数 = COUNTROWS('销售明细')坑点:这里用
COUNTROWS不用COUNT('销售明细'[订单号])——如果订单号列有空白,COUNT会漏算。COUNTROWS数的是表里实际有几行,永远准。
3. 客单价(销售额 ÷ 订单数,加 DIVIDE 防除零)
dax客单价 = DIVIDE([总销售额], [订单数], 0)人话解释:
DIVIDE(A, B, 兜底)= A ÷ B,如果 B 是 0 就返回兜底值,不会算成错误。这写法是 DAX 的标准习惯。
4. 同比增长率(去年同期的销售额)
dax去年销售额 = CALCULATE([总销售额], SAMEPERIODLASTYEAR('Date'[Date]))dax同比增长率 =
DIVIDE(
[总销售额] - [去年销售额],
[去年销售额],
0
)关键点:
SAMEPERIODLASTYEAR是时间智能函数,会把当前筛选上下文(比如"10 月")平移到去年 10 月。前提是日期表必须标记为日期表(上一步刚做完)。
5. 累计销售(本年累计,YTD)
dax累计销售额 = TOTALYTD([总销售额], 'Date'[Date])人话解释:
TOTALYTD是 DAX 的本年累计时间函数,自动汇总"从当年 1 月 1 日到当前筛选上下文对应日期"的所有销售额,跨年也准。前提仍然是日期表必须标记为日期表,且与销售明细建立关系。注意:原FILTER(ALL('Date'[Date]), 'Date'[Date] <= MAX('Date'[Date]))写法其实是"从 Date 表最早日期累计到当前",跨年场景会失真——这就是为啥推荐用TOTALYTD。如果不方便改,可以写成等价形式CALCULATE([总销售额], DATESYTD('Date'[Date]))。
6. 产品销售排名(用 RANKX 给产品排第几)
dax产品销售排名 =
RANKX(
ALL('产品主数据'[product_name]),
[总销售额]
)关键点:
ALL是"去掉筛选器"。如果不加ALL,产品 A 的排名会受到"当前选了产品 B"的筛选影响,永远排第 1。加了ALL之后,不管用户怎么筛产品,每个产品都能跟所有产品比,排名才稳。
7.(进阶)滚动三月平均(看趋势用)
dax滚动三月均值 =
AVERAGEX(
DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -3, MONTH),
[总销售额]
)人话解释:
DATESINPERIOD返回"从今天往前推 3 个月"的日期区间,AVERAGEX在这个区间里逐月算销售额再求平均。月波动大的时候用滚动均值看趋势,比直接看月销售额稳得多。
把 7 个度量值都建好后,选中度量值后到 "度量值工具"功能区 → 格式 里调成千分位/百分比(同比增长率改"百分比",其他改"千分位整数")。
第四步:搭可视化看板(10 分钟)
回到 Power BI 报表视图,从右栏 可视化 面板拖组件:
- KPI 卡片(关键指标):拖 4 个
卡片图(Card),分别绑[总销售额]、[订单数]、[客单价]、[同比增长率]。同比增长率记得改格式为百分比。 - 柱状图(区域销售):拖
簇状柱形图,轴 =region_cd(或中文"区域编码"),值 =[总销售额]。 - 折线图(趋势):拖
折线图,轴 =Date[YearMonth],值 =[总销售额]和[累计销售额]两条线。 - Top 10 产品表:拖
表,行 =产品主数据[product_name],值 =[总销售额]。点TopN 筛选器→ 选"按总销售额" → Top 10。 - 切片器(日期筛选):拖
切片器,字段 =Date[YearMonth],这样别人点月份整个看板就跟着变。
调好位置和大小后,点 文件 → 保存 为 销售看板.pbix。
第五步:导出图表素材(5 分钟)
汇报 PPT 里需要 Power BI 的图,但 PPT 不能直接插活的 Power BI 报表(Power BI 服务里的"发布到 Web"和"嵌入 PPT"是企业版功能,免费用户用不了)。稳妥方案:
方案 A(推荐,免费):用 Power BI 截图
- 看板调好后在 Power BI Desktop 里直接按
Print Screen或用Win + Shift + S截图,存成区域销售.png、趋势图.png、Top10产品.png。
方案 B(数据驱动):导出关键数据 CSV
- 在报表视图里把鼠标移到
Top 10 产品表(视觉对象)右上角,会浮出...(更多命令)按钮 → 点...→ 选导出数据→ 选CSV→ 保存为top10_products.csv,后面让 AI 看这个 CSV 生成 PPT 数据卡。
第六步:用 AI 生成汇报 PPT(10 分钟)
这一步有两条路径,根据你有没有 Copilot 选一条:
路径 1:PowerPoint + Copilot(Microsoft 365 订阅用户)
打开 PowerPoint → 新建空白演示文稿 → 顶栏 Copilot 按钮(或 开始 选项卡里的 Copilot 面板)→ 选 "使用文件创建演示文稿" → 在弹窗里:
附加文件:上传你刚才的截图(
区域销售.png、趋势图.png)+ 一份预先准备的 Word 大纲(汇报大纲.docx,里面写"我要一份销售周报 PPT,8 页")。不确定标注:Copilot 能否直接识别 Power BI 截图并生成图表式幻灯片——不能保证。稳妥做法是把截图粘到 Word 大纲里当插图,Copilot 看 Word 文档时能识别图片位置。
提示词(在 Copilot 对话框里输入):
请根据我上传的大纲和图片,生成一份 8 页的销售周报 PPT。
风格:商务简洁,配色用深蓝+白底。
每页要点不超过 5 行,标题用动宾结构。
第 1 页封面、第 2 页关键指标、第 3-4 页区域分析、第 5 页趋势、
第 6 页 Top 10 产品、第 7 页结论与下周计划、第 8 页 Q&A。- 点 "生成",Copilot 会给你一个草稿,数字一律不准——它只是排版机器,不读你的数据。
路径 2:通义千问 / Kimi / ChatGPT(通用方案)
如果你没买 Microsoft 365 Copilot,可以用通义千问或 Kimi:
- 准备素材包:把截图 + 关键数据 CSV + 汇报要点(手写 5 条),打成 zip 上传。
- 提示词:
你是资深销售分析师,帮我把下面的素材整理成一份 8 页的 PPT 大纲(Markdown 格式),
每页格式如下:
## 第N页:标题
- 要点 1
- 要点 2
- 配图建议:(写明用哪张截图)
【关键数据】
总销售额 XXX 万元,同比 +XX%,订单数 XXXX,客单价 XXX 元。
Top 3 产品:SKU001(XX 万)、SKU002(XX 万)、SKU003(XX 万)。
区域分布:华东占 45%、华南 30%、华北 25%。
【截图清单】
1. 区域销售.png(柱状图)
2. 趋势图.png(折线图)
3. Top10产品.png(表格截图)- 把 AI 给的 Markdown 大纲复制到 PowerPoint 里,手动排版,每页粘上对应截图。30 分钟能出活儿。
关键点:永远不要让 AI 自己"算"数字,它会瞎编。所有数据必须来自 Power BI,AI 只负责"排版 + 写连接句 + 起小标题"。这是用 AI 做汇报的第一红线。
四、原理小结
整条流水线其实是经典的 "数据 → 信息 → 知识 → 行动" 四层模型:
- 数据层(Excel):原始明细,杂乱、有错、格式不一。
- 信息层(Power Query):把数据清洗成"规范的、能复用的"事实表 + 维度表。所有清洗步骤都变成 M 脚本,下次新数据来了"刷新"就行。
- 知识层(Power BI + DAX):在规范表上建模型、写度量值、做可视化。DAX 的本质是"在筛选上下文里动态计算"——你点"只看 10 月",所有用
Date表筛选的度量值自动重算。 - 行动层(AI + PPT):把图表和数据"翻译"成决策者能听懂的故事**。AI 在这里只做翻译,不做计算。
理解这四层后你会发现:Excel 和 PPT 都不是重点,重点是中间两层(Power Query + Power BI)的可复用性。这条流水线跑通一次,下周你要做的就是"把新 Excel 拖进来 → 刷新 Power Query → 刷新 Power BI → 重新截图 → AI 重出 PPT",核心手工时间压到 10 分钟以内。
五、避坑指南
坑 1:DAX 度量值和计算列别混用
- 度量值(Measure):写在
新建度量值里,跟着筛选上下文变,不占内存。销售指标类的都用度量值。 - 计算列(Calculated Column):写在
新建列里,每行算一次、写死在表里,占内存。只在"需要按行判断"(如"客户分级 = IF(销售额>100万, 'VIP', '普通')")时用。 - 误用后果:把"总销售额"写成计算列 → 3 万行算 3 万次存进表里 → 文件膨胀、刷新变慢。
坑 2:DAX 时间智能函数必须配日期表
SAMEPERIODLASTYEAR、TOTALYTD、PARALLELPERIOD、DATEADD 这几个时间智能函数都假设你有一张连续的、没有空缺的日期表。如果你的销售数据本身日期不全(节假日没单),直接用 Sales[Date] 做时间轴,会算出错误。必须建独立 Date 表 + 标记为日期表。
坑 3:Power BI 的筛选方向别乱改
关系建好后,卡片筛选方向默认"单向"(从销售明细指向主数据)。单个关系勾"双向"本身不会立刻出事;多条关系首尾相接形成环路时,报表才会报"检测到循环依赖/路径不明确"。保持单向,需要"双向筛选"时用 CALCULATE + CROSSFILTER 临时打开。
坑 4:AI 生成的数字一定人工核对
不管用 Copilot 还是通义千问,AI 一定会"看起来很专业地编造数字"。你看到的"销售额 1.23 亿,同比 +15.6%"——很可能就是它编的。只让 AI 干"排版 + 文字润色"两件事,数字一律从 Power BI 截图或导出的 CSV 里来。
坑 5:Power BI Desktop 的 Copilot 收费,普通用户用不上
Power BI 的 Copilot 需要 Fabric 容量 或 Power BI Premium Per User(PPU,月费约 20 美元) 才能用全部功能。免费版 Power BI Desktop 看不到 Copilot 按钮。本文的 DAX 都是手写,不依赖 Copilot,成本为零。Copilot 主要价值在"自动生成 DAX 草稿"和"自动推荐图表",对 L3 用户来说手写更快、更可控。
六、进阶延展
跑通这条流水线之后,可以往三个方向深入:
- 自动化刷新:把
销售明细.xlsx放进 OneDrive / SharePoint,用 Power BI Service 配计划刷新(每天早上 7 点;注意计划刷新需要 Pro 及以上许可,免费账号没有),早上打开 PPT 链接就是最新数据,连"刷新"都省了。 - 接入 Power Automate 自动出 PPT:Power BI 报告保存截图 → Power Automate 触发 → 调用 AI API 生成 PPT → 自动发邮件给老板。整条链路上没人按按钮。
- 加 Python 脚本做预测:在 Power BI 里装 Python 视觉对象,用
prophet或statsmodels跑一个"下季度销售预测",把预测图加进 PPT 倒数第 2 页,让汇报有"前瞻性"而不是只总结过去。
下一步:如果你想系统学 DAX,建议看《DAX 权威指南》( Russo / Ferrari 著),重点看"筛选上下文"和"计算上下文"两章——理解这两个概念,DAX 就入门了一半。学完回头看本文的
CALCULATE、ALL、FILTER,会有"原来如此"的通透感。