【综合实战】实战:销售数据→分析→汇报一条龙

摘要:从一份粗糙的销售 Excel → Power Query 清洗 → Power BI 建模做 DAX 分析 → 导出图表/数据 → AI 一键生成汇报 PPT。整套跑通 30 分钟,DAX 公式真实可复制。

一、痛点引入

周一早上 9 点,老板在群里甩一句话:"上周华东区销售情况怎么样?这周五给我个汇报。"

你摊开手边的 Excel,大概是这么个场景:

  • 一份从 ERP 导出来的 销售明细_2025.xlsx3 万行,列名全是英文缩写(cust_idprod_skuamtregion_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 样东西:

  1. 一个 Power Query 清洗脚本.pq.txt):从原始 Excel 一键完成"去空行 + 改类型 + 合表 + 出规范表",每周新数据来了只刷新一次
  2. 一个 Power BI 数据模型(.pbix:包含 3 张表(销售明细、产品、客户)+ 1 张日期表,关系图清晰。
  3. 7 个核心 DAX 度量值:总销售额、订单数、客单价、同比增长、累计销售、Top 10 排名。全部真实可运行,复制即用。
  4. 一份 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 的精髓——所有操作变成可重放的步骤,下次新数据来了点"刷新"就重跑一遍):

  1. 提升标题行主页将第一行用作标题(自动生成 #"Promoted Headers"
  2. 改列类型:选中 qty / unit_price / amt 三列 → 转换数据类型小数;选 order_date数据类型日期
  3. 删除空白行和错误行主页删除行删除空行(自动生成 #"Removed Empty Rows"
  4. 过滤脏数据:点 region_cd 列的下拉箭头 → 取消勾选 null(null)
  5. 改列名为中文:双击列名依次改名 order_date → 下单日期cust_id → 客户编号prod_sku → 产品编号qty → 数量unit_price → 单价amt → 销售金额region_cd → 区域编码order_id → 订单号

改完后,点左栏 "高级编辑器",你能看到 Power Query 生成的 M 语言代码(M 语言 = Power Query 背后的脚本语言,类 SQL 的函数式风格),长这样:

powerquery-m
let // 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 时间函数的"标准日历"。点 主页新建表,输入:

dax
Date = CALENDAR(DATE(2025,1,1), DATE(2025,12,31))

然后给日期表加 3 个计算列:

dax
Year = YEAR('Date'[Date]) Month = MONTH('Date'[Date]) YearMonth = FORMAT('Date'[Date], "YYYY-MM")

最后让日期表和销售明细建关系:销售明细[下单日期]Date[Date]

关键点:日期表必须标记为"日期表"——点日期表 → 上方菜单 表工具标记为日期表 → 选 Date 列。不标记的话,SAMEPERIODLASTYEARTOTALYTD 这些时间函数会报错或算错。

第三步:写 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 报表视图,从右栏 可视化 面板拖组件:

  1. KPI 卡片(关键指标):拖 4 个 卡片图(Card),分别绑 [总销售额][订单数][客单价][同比增长率]同比增长率记得改格式为百分比
  2. 柱状图(区域销售):拖 簇状柱形图,轴 = region_cd(或中文"区域编码"),值 = [总销售额]
  3. 折线图(趋势):拖 折线图,轴 = Date[YearMonth],值 = [总销售额][累计销售额] 两条线。
  4. Top 10 产品表:拖 ,行 = 产品主数据[product_name],值 = [总销售额]。点 TopN 筛选器 → 选"按总销售额" → Top 10。
  5. 切片器(日期筛选):拖 切片器,字段 = 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趋势图.pngTop10产品.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:

  1. 准备素材包:把截图 + 关键数据 CSV + 汇报要点(手写 5 条),打成 zip 上传。
  2. 提示词
你是资深销售分析师,帮我把下面的素材整理成一份 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(表格截图)
  1. 把 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 时间智能函数必须配日期表

SAMEPERIODLASTYEARTOTALYTDPARALLELPERIODDATEADD 这几个时间智能函数都假设你有一张连续的、没有空缺的日期表。如果你的销售数据本身日期不全(节假日没单),直接用 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 用户来说手写更快、更可控

六、进阶延展

跑通这条流水线之后,可以往三个方向深入:

  1. 自动化刷新:把 销售明细.xlsx 放进 OneDrive / SharePoint,用 Power BI Service 配 计划刷新(每天早上 7 点;注意计划刷新需要 Pro 及以上许可,免费账号没有),早上打开 PPT 链接就是最新数据,连"刷新"都省了
  2. 接入 Power Automate 自动出 PPT:Power BI 报告保存截图 → Power Automate 触发 → 调用 AI API 生成 PPT → 自动发邮件给老板。整条链路上没人按按钮
  3. 加 Python 脚本做预测:在 Power BI 里装 Python 视觉对象,用 prophetstatsmodels 跑一个"下季度销售预测",把预测图加进 PPT 倒数第 2 页,让汇报有"前瞻性"而不是只总结过去

下一步:如果你想系统学 DAX,建议看《DAX 权威指南》( Russo / Ferrari 著),重点看"筛选上下文"和"计算上下文"两章——理解这两个概念,DAX 就入门了一半。学完回头看本文的 CALCULATEALLFILTER,会有"原来如此"的通透感。