项目介绍
这个项目用 SQL 整理销售数据,再用 Power BI 做出可以筛选和逐步查看明细的经营报表。我想回答的问题是:销售收入主要来自哪里,这些收入带来了多少估算毛利,以及哪些渠道和商品需要进一步检查。项目最后做成了经营总览、盈利诊断和区域分析三页看板,保留了数据处理代码、指标公式和检查记录。 数据来自微软公开的 AdventureWorksDW2022 示例数据库,记录的是一家虚构企业的业务。我下载数据库备份,在本地 SQL Server 中还原,再读取网络直销和经销商的销售记录,以及产品、日期、地区和促销资料。
项目阶段
- 01
统一网络直销与经销商的销售记录
数据来自Microsoft官方AdventureWorksDW2022虚构样例库:下载.bak备份,在本地SQL Server中还原数据库。Internet网络直销与Reseller经销商记录分别存放在两张表中,SQL统一收入、产品成本、数量和日期后,用UNION ALL合并并保留全部商品行及渠道标记。每一行代表一张订单中的一个商品行。
查看处理方法与依据收起技术细节
- 02
核对行数、金额和关联字段
合并后,SQL 独立检查明细编号是否唯一,订单、日期和产品等关键字段是否缺失,数量和金额是否异常。程序还比较两张源表与统一视图的行数、收入和成本,检查数据整理有没有造成记录丢失或重复。
查看处理方法与依据收起技术细节
- 03
建立可以按日期、商品和地区筛选的数据模型
Power BI 中间放销售事实表,周围连接日期、产品、地区和促销资料表,这种组织方式称为星型模型。销售表记录卖了多少、收入和成本是多少;周围的资料表说明什么时候、什么商品、哪个地区及哪种促销。
查看处理方法与依据收起技术细节
- 04
定义收入、订单数和估算毛利指标
DAX 是 Power BI 中编写指标计算规则的语言。本项目分别定义销售收入、产品成本、估算毛利、估算毛利率、订单数和销售件数,使指标能够随年份、渠道或品类的选择重新计算。
查看处理方法与依据收起技术细节
- 05
沿渠道、品类和商品继续定位经营差异
经营总览先把渠道收入占比与估算毛利贡献放在一起比较。Reseller 贡献约 73.26% 的收入,估算毛利贡献约为 3.75%,因此后续重点放在这个渠道:选择相应年份,继续查看品类和 SKU,也就是具体商品的编号。
查看处理方法与依据收起技术细节
- 06
核对报表结果,并保存可追查的分析材料
页面完成后,使用 SQL 独立结果对照 Power BI 的收入、成本和估算毛利,检查筛选条件一致时是否得到相同结果。再逐页确认日期、渠道和品类选择是否影响对应图表,避免画面已经切换、计算范围却没有切换。
查看处理方法与依据收起技术细节
滚轮缩放 · 拖动空白处移动 · 点击节点阅读
统一网络直销与经销商的销售记录
数据来自Microsoft官方AdventureWorksDW2022虚构样例库:下载.bak备份,在本地SQL Server中还原数据库。Internet网络直销与Reseller经销商记录分别存放在两张表中,SQL统一收入、产品成本、数量和日期后,用UNION ALL合并并保留全部商品行及渠道标记。每一行代表一张订单中的一个商品行。
查看处理方法与依据收起技术细节
这个项目先把两个销售渠道放在一起比较,再逐步查看收入与估算毛利的差异。沿着六个阶段,可以看到数据怎样变成三页经营看板。
1把两个渠道的销售记录合在一起
官方数据库备份 → 在本地 SQL Server 中还原
合并全部商品行
中的一行商品
SQL 统一直销与经销商的字段后,按行追加两张销售表,保留渠道信息,得到 121,253 条商品明细。订单编号加入渠道前缀,明细编号再加商品行号,便于区分每条记录。
工具与方法:SQL Server 是存放和查询数据的软件;SQL 是查询语言;Python 脚本负责导出后续要用的表格。
查看处理方法与依据收起处理方法与依据
- 下载微软 AdventureWorksDW2022 备份,在 SQL Server 中还原
- 两张销售表统一字段,并分别保留渠道名称
- 使用 UNION ALL 追加全部商品行
- 生成订单编号与明细编号 → 得到 121,253 条销售明细
| 需要区分什么 | 处理规则 | 为什么这样处理 |
|---|---|---|
| 两个销售渠道 | Internet 与 Reseller 统一列名、含义和顺序,再纵向追加 | 两个渠道都是销售记录,可以放在同一张表中比较 |
| 一张订单 | 渠道+原订单号构成 order_id | 避免不同渠道的订单编号重合 |
| 一个商品行 | 渠道+原订单号+行号构成 sales_line_id | 同一订单可以购买多种商品,需要分别保存 |
| 重复与保留 | UNION ALL 保留所有行,重复编号另外检查 | 相同金额或商品的两行可能是两笔真实销售 |
合并渠道时使用按行追加;关联产品、日期等资料时才按编号连接。前一步增加销售记录,后一步让销售记录能够按产品和时间筛选。
2检查合并后的数据有没有缺失或重复
| 检查对象 | 怎样判断 |
|---|---|
| 行数与金额 | 两张源表相加 = 统一销售表 |
| 明细编号 | 每个编号出现次数 = 1 |
| 关键字段与关联 | 必要信息不缺失,编号能找到对应表 |
| 日期范围 | 记下各渠道覆盖到哪一天 |
SQL 对照合并前后的行数、收入和成本,检查重复编号、缺失字段及无法关联的记录。Power Query 用于查看字段类型、空值和错误,日期覆盖不完整的情况单独记录。
工具与方法:SQL 独立执行检查;Power Query 是 Power BI 内整理与检查数据的功能,用来查看类型、空值和错误。
查看处理方法与依据收起处理方法与依据
- 分别统计两张源表的行数、收入与成本
- 对照合并后的销售明细
- 检查编号、缺失值与资料表关联
- 在 Power Query 查看类型和错误,并记录日期覆盖范围
| 检查对象 | 具体做法 | 要发现的问题 |
|---|---|---|
| 行数与金额 | 源表合计与统一视图比较 | 合并时丢行、重复行或字段取错 |
| 明细编号 | 按 sales_line_id 分组,查找计数大于 1 的编号 | 一条商品明细被重复保存 |
| 关键字段与关联 | 统计空值;查找在资料表中没有对应编号的记录 | 日期、产品等信息缺失或无法筛选 |
| 类型与时间范围 | Power Query 查看整份数据的列质量和日期范围 | 类型转换错误、年份或渠道覆盖不完整 |
Power Query 是 Power BI 中读取和整理数据的工具。检查范围需要切换到整个数据集,避免只看到预览行的情况。
年份比较要先确认覆盖月份。样例中存在不完整年份,经销商的 2013 年记录只覆盖到 11 月,不能直接把这段数据当成完整年度。
3连接表格,让筛选条件找到对应销售
日期、产品、地区和促销表通过编号关联销售明细。选择年份或品类后,Power BI 筛出对应记录,再计算图表中的数字;资料表到销售表采用单向一对多关系。
工具与方法:Power BI Desktop 是报表软件;星型模型指销售表在中心、分类说明表分别与它连接的表格结构。
查看处理方法与依据收起处理方法与依据
- 将销售明细放在模型中心
- 四张资料表按编号连接销售明细
- 用户选择年份、产品、地区或促销
- 筛选传到销售明细 → 图表重新计算
| 资料表 | 销售明细中的关联字段 | 资料表中的对应字段 |
|---|---|---|
| 日期表 | OrderDateKey | DateKey |
| 产品表 | ProductKey | ProductKey |
| 地区表 | SalesTerritoryKey | SalesTerritoryKey |
| 促销表 | PromotionKey | PromotionKey |
资料表每个编号对应一条资料,销售明细中同一编号可以出现多次,所以采用资料表到销售明细的单向一对多关系。这种中心放销售、周围放资料的结构称为星型模型。
例如选择某个年份,日期表先确定这一年的日期编号,再筛出对应商品行。总览、盈利诊断和区域页面由此使用相同的筛选条件。
4按统一公式计算六项指标
销售件数:把每行购买数量相加。
DAX 按当前筛选范围计算收入、成本、估算毛利、毛利率、订单数和销售件数。毛利率用总估算毛利除以总收入,订单数按不同订单编号计数。样例成本不包含企业全部费用。
工具与方法:DAX 是 Power BI 中编写指标公式的语言;SQL 用另一份查询计算对照结果。
查看处理方法与依据收起处理方法与依据
- 用户选定年份、渠道或品类
- DAX 读取当前范围内的销售明细
- 计算六项指标 → 同步显示在卡片和图表中
| 指标 | 计算方法 | 计算时注意什么 |
|---|---|---|
| 销售收入 | 对统一视图中的 revenue 求和;来源为 SalesAmount | 使用当前筛选范围 |
| 样例产品成本 | 对 cost 求和;来源为 TotalProductCost | 该字段已经是对应商品行的成本,不再乘数量 |
| 估算毛利 | 销售收入 − 样例产品成本 | 样例产品成本不包含企业全部费用 |
| 估算毛利率 | 总估算毛利 ÷ 总销售收入 | 不直接平均每行的毛利率;分母为零时单独处理 |
| 订单数 | 对带渠道前缀的 order_id 去重计数 | 一张订单的多个商品行只计一次 |
| 销售件数 | 对 quantity 求和;来源为 OrderQuantity | 商品件数与订单数分别计算 |
DAX 是 Power BI 的指标计算语言。公式会随筛选条件重新计算,因此各页面可以共用相同定义。举例说明:若所选记录收入合计 100、成本合计 60,估算毛利就是 40,估算毛利率就是 40%;这里的金额为说明公式而设。
5从总体结果逐步找到问题集中的位置
- 经营总览
- 经销商渠道
- 年份与品类
- 具体产品
经销商贡献约 73.26% 的收入,估算毛利贡献却只有约 3.75%。继续按年份、品类和商品查看,可以定位值得核查的销售记录;折扣与低毛利同时出现,仍不足以证明因果。
工具与方法:Power BI 图表与筛选器展示比较;SQL 按不同条件分组汇总,提供分析依据。
查看处理方法与依据收起处理方法与依据
- 总览比较收入与估算毛利贡献
- 经销商:收入占 73.26%,估算毛利贡献约 3.75%
- 继续按年份 → 品类 → 具体商品查看
- 结合折扣和地区,确定值得继续核查的记录
| 查看顺序 | 观察到的结果 | 接下来查什么 |
|---|---|---|
| 渠道 | 经销商的收入贡献明显高于估算毛利贡献 | 差异集中在哪一年、哪类商品 |
| 年份与品类 | 2013 年经销商估算毛利约 −49.19 万美元;自行车约 −101.66 万美元 | 哪些商品为负,其他品类抵消了多少亏损 |
| 地区与渠道 | 加拿大整体毛利率约 6.16%;直销约 41.96%,经销商约 1.24% | 地区结果是否受到渠道结构影响 |
| 折扣与商品 | 对照折扣档位和负毛利商品 | 继续核查价格、成本与促销条件 |
下钻就是从总体逐步查看更细的分组。这里先用渠道差异确定查看方向,再进入年份、品类和商品,避免直接在全部明细里寻找原因。
这些结果说明问题集中在哪里。折扣与低毛利同时出现,还需要价格和成本等资料才能判断原因;年度数字也按实际覆盖月份解释。
6对照计算结果,再保存可查依据的报告
121,253 条商品明细
SQL 计算 ↔ Power BI 指标
按同一日期、渠道与公式对照31,455 张订单
质量检查 → 计算结果 → 审查 → 报告
保存检查记录与发布批准Power BI 使用商品明细展示结果,工作台另读取汇总后的 31,455 张订单,检查数据并保存计算依据。工作台报告通过检查,不代表整份 Power BI 文件已经完成独立审查。
工具与方法:SQL 和 Power BI 分别计算;工作台保存任务、运行结果和人工发布批准。
查看处理方法与依据收起处理方法与依据
- 121,253 条商品明细 → Power BI 三页报表
- 另按渠道+订单号汇总 → 31,455 张订单
- 订单表与分析输入合同交给工作台
- 核对检查记录、计算结果与报告
| 材料 | 一行表示什么 | 使用目的 |
|---|---|---|
| Power BI 销售明细 | 一张订单的一个商品行 | 查看产品、品类、促销和经营差异 |
| 工作台订单表 | 一张订单 | 检验订单级数据的检查、计算和报告流程 |
| SQL 对照结果 | 同一范围的行数、收入与成本 | 与页面使用相同筛选条件,核对数字 |
选择订单表,是因为工作台本次经营案例以订单为记录单位。31,455 来源于销售明细按渠道和订单号汇总,并非另找的一批订单。
工作台复核的是提交的订单数据及对应计算结果。Power BI 的商品关系、DAX 和页面筛选,还要用相同范围的 SQL 结果对照。
订单表先对每个订单的各品类收入求和,再取收入最高的品类作为该订单的品类;收入相同时按品类名称升序选取。因此订单表的品类表示主要收入品类,按商品品类查看时仍使用销售明细。
图片与材料
点击文件夹展开,再点击图片放大。
经营总览:在同一页对照收入、估算毛利率的月度变化,以及Internet和Reseller的规模与毛利贡献错位。
分析结果
- 01
Reseller贡献约73.26%的收入,却只贡献约3.75%的估算毛利,规模与盈利贡献明显错位。
- 02
2013年Reseller渠道估算毛利为负,亏损主要集中在Bikes品类与部分SKU。
- 03
区域差异很大程度上由渠道与产品结构共同影响,不能直接把相关关系说成地区导致亏损。
分析中的判断与处理
折扣与低毛利同时出现,只能说明两者存在关联,现有数据还不能证明折扣造成亏损;地区毛利率不同,也需要继续检查渠道和产品结构。项目将已经确认的事实、待验证原因和当前无法证明的部分分开,使三页Power BI分别承担经营总览、盈利诊断和区域分析的任务。
我与 AI 如何完成项目
Codex + ChatGPT-sol
个人完成。本人定义经营问题与指标口径,搭建分析路径,校验SQL与Power BI结果,并对结论和边界负责。
我先怎样确定分析问题
我把课程数据、已有字段和“规模增长是否带来健康估算毛利”的问题交给Codex与ChatGPT-sol讨论。AI帮助检查还缺少哪些指标、维度和对账步骤,我根据经营含义确定销售收入、样例产品成本、估算毛利、估算毛利率、订单数和销售件数的口径。
AI怎样帮助搭建技术方案
AI提供SQL统一视图、星型模型、DAX度量值和页面结构的建议,也在Power BI出现关系、排序、条件格式和DAX错误时帮助定位原因。我在Power BI中完成导入、关系建立、度量值创建、筛选器设置和页面制作。
哪些结果由我核对
我使用Power Query检查整表质量,比较SQL与Power BI总额,逐页检查筛选器和指标是否联动,再根据渠道、品类、SKU和地区结果修正分析结论。
工作台在项目末尾怎样参与
Power BI页面完成后,我再把分析就绪数据交给可信分析工作台生成可追溯报告。工作台负责保存口径、检查与结论来源,Power BI继续承担交互分析和展示。
参考与使用说明
Microsoft AdventureWorks 示例数据 ↗
AdventureWorks提供虚构企业的销售、产品、客户和地区数据。本项目自行统一Internet与Reseller销售口径,并设计经营总览、盈利诊断和区域分析页面。
结果适用范围
- AdventureWorks是虚构样例,结论用于展示分析能力,不代表真实企业经营事实。
- 估算毛利=销售收入−样例产品成本,不是包含期间费用、税费后的净利润。
- 2010、2014及Reseller 2013存在不完整期间,跨年比较必须谨慎。