DeepSeek + Excel 实战:多表联动分析与异常数据自动预警教程
本教程介绍如何结合DeepSeek AI与Excel高级功能构建智能数据分析系统。主要内容包括:1) 使用PowerQuery进行多源数据清洗与整合;2) 通过PowerPivot建立数据模型关系;3) 运用DAX编写关键业务指标;4) 创建多表联动的交互式仪表盘;5) 重点讲解三种异常检测方法(标准差法、EWMA控制图、业务规则)的实现,并整合VBA实现自动预警通知。教程以零售业销售库存分析为案
DeepSeek + Excel 实战:多表联动分析与异常数据自动预警教程
摘要: 在数据驱动的时代,高效、精准地从海量数据中提取价值并快速识别异常至关重要。Excel 作为广泛使用的数据处理工具,结合强大的 AI 助手 DeepSeek,可以发挥出远超传统方法的效能。本教程将详细讲解如何利用 Excel 的高级功能(如 Power Query, Power Pivot, DAX)实现多张数据表的智能联动分析,并重点介绍如何借助 DeepSeek 的 AI 能力,构建灵活、智能的异常数据自动预警机制。通过手把手的步骤讲解、丰富的实战案例和完整的代码实现,帮助读者掌握这一强大的数据分析组合技能,提升工作效率和决策质量。
关键词: DeepSeek, Excel, 多表联动, 数据分析, 数据建模, Power Query, Power Pivot, DAX, 异常检测, 自动预警, AI 助手
目录
-
引言:数据挑战与解决方案
- 1.1 多源异构数据的整合困境
- 1.2 传统异常检测方法的局限性
- 1.3 DeepSeek + Excel 组合的优势
-
环境准备与基础概念
- 2.1 DeepSeek 简介与接入方式
- 2.1.1 DeepSeek 是什么?
- 2.1.2 如何在 Excel 环境中利用 DeepSeek (API/手动交互)
- 2.2 Excel 高级分析工具概览
- 2.2.1 Power Query:强大的数据获取与转换引擎
- 2.2.2 Power Pivot:内存列式数据库与数据模型
- 2.2.3 DAX:数据分析表达式语言
- 2.2.4 Excel VBA:自动化与扩展
- 2.1 DeepSeek 简介与接入方式
-
实战场景设定:零售业销售与库存分析
- 3.1 数据表介绍
- 3.1.1
Sales表:销售流水记录 - 3.1.2
Products表:产品基础信息 - 3.1.3
Inventory表:每日库存快照 - 3.1.4
Stores表:门店信息 - 3.1.5
Calendar表:日期维度表
- 3.1.1
- 3.2 核心分析目标
- 3.2.1 多维度销售业绩分析 (按产品、门店、时间)
- 3.2.2 库存周转率与健康状况评估
- 3.2.3 自动识别销售异常值 (突增/突降)
- 3.2.4 自动识别库存异常值 (负库存、超低库存、呆滞库存)
- 3.2.5 构建可视化仪表盘
- 3.1 数据表介绍
-
第一步:数据获取与清洗 - Power Query 实战
- 4.1 连接数据源 (示例:文件夹中的 CSV 文件)
- 4.2 加载各原始表至 Power Query 编辑器
- 4.3 数据清洗关键操作
- 4.3.1 处理缺失值
- 4.3.2 修正数据类型
- 4.3.3 删除重复项
- 4.3.4 文本清洗 (Trim, Clean)
- 4.3.5 拆分/合并列
- 4.3.6 添加自定义列 (计算字段)
- 4.4 利用 DeepSeek 辅助清洗思路
- 4.4.1 描述数据问题,获取清洗建议
- 4.4.2 生成复杂清洗步骤的 M 语言代码片段
- 4.5 将清洗后的数据加载至 Excel 数据模型 (Power Pivot)
-
第二步:构建数据模型与关系 - Power Pivot 实战
- 5.1 理解维度表与事实表
- 5.2 建立表间关系
- 5.2.1
Sales与Products(通过 ProductID) - 5.2.2
Sales与Stores(通过 StoreID) - 5.2.3
Sales与Calendar(通过 Date) - 5.2.4
Inventory与Products(通过 ProductID) - 5.2.5
Inventory与Stores(通过 StoreID) - 5.2.6
Inventory与Calendar(通过 Date)
- 5.2.1
- 5.3 验证关系完整性 (一对多,多对一)
- 5.4 创建层次结构 (如 年 -> 季度 -> 月 -> 日)
-
第三步:编写核心指标 - DAX 语言实战
- 6.1 DAX 基础语法回顾
- 6.2 关键销售指标
- 6.2.1 总销售额:
Total Sales = SUM(Sales[SalesAmount]) - 6.2.2 日均销售额:
Avg Daily Sales = AVERAGEX(VALUES(Calendar[Date]), [Total Sales]) - 6.2.3 同比/环比增长率 (使用
SAMEPERIODLASTYEAR,DATEADD)
- 6.2.1 总销售额:
- 6.3 关键库存指标
- 6.3.1 日均库存量:
Avg Daily Inventory = AVERAGEX(VALUES(Calendar[Date]), SUM(Inventory[StockQuantity])) - 6.3.2 库存周转率:
Inventory Turnover = DIVIDE([Total Sales], [Avg Daily Inventory])(简化公式,实际需考虑成本) - 6.3.3 当前库存状态:基于最近日期的库存量
- 6.3.1 日均库存量:
- 6.4 利用 DeepSeek 辅助 DAX 编写
- 6.4.1 描述计算逻辑,获取 DAX 公式建议
- 6.4.2 调试复杂的 DAX 公式 (解释错误信息)
- 6.4.3 优化 DAX 公式性能建议
-
第四步:多表联动分析 - 数据透视表与图表
- 7.1 基于数据模型创建数据透视表
- 7.2 实现多表字段联动分析
- 7.2.1 分析各门店 (Stores) 不同产品类别 (Products) 的销售额
- 7.2.2 分析各产品 (Products) 在不同月份 (Calendar) 的库存周转率
- 7.2.3 切片器联动控制 (门店、产品类别、时间段)
- 7.3 创建关键绩效指标 (KPI) 卡片
- 7.4 构建交互式图表
- 7.4.1 时间趋势折线图 (销售额、库存量)
- 7.4.2 门店/产品分布柱状图/饼图
- 7.4.3 库存周转率散点图/气泡图
- 7.5 利用 DeepSeek 辅助可视化设计
- 7.5.1 描述分析需求,获取合适的图表类型建议
- 7.5.2 优化图表格式和布局的建议
-
第五步:核心 - 异常数据自动预警机制
- 8.1 异常检测方法论选择
- 8.1.1 统计方法:标准差法 (Z-Score)
- 8.1.2 统计方法:移动平均法 (Moving Average)
- 8.1.3 统计方法:指数加权移动平均控制图 (EWMA)
- 8.1.4 业务规则法 (硬性阈值)
- 8.1.5 结合 DeepSeek 的 AI 辅助判断 (模式识别、上下文理解)
- 8.2 基于标准差法的预警实现 (DAX/Power Pivot)
- 8.2.1 计算历史基准值 (如过去 30 天日均销售额)
- 8.2.2 计算历史标准差 (STDEV.P)
- 8.2.3 定义异常阈值 (如
基准值 ± 2 * 标准差) - 8.2.4 比较当前值与阈值
- 8.2.5 DAX 度量值示例:
Sales Baseline (30d) = CALCULATE( [Avg Daily Sales], DATESINPERIOD(Calendar[Date], LASTDATE(Calendar[Date]) - 30, -30, DAY) ) Sales StdDev (30d) = CALCULATE( STDEV.PX( // X版本处理多行上下文 VALUES(Calendar[Date]), [Total Sales] ), DATESINPERIOD(Calendar[Date], LASTDATE(Calendar[Date]) - 30, -30, DAY) ) Is Sales Outlier = VAR CurrentSales = [Total Sales] VAR Baseline = [Sales Baseline (30d)] VAR Threshold = 2 * [Sales StdDev (30d)] RETURN IF( OR( CurrentSales > Baseline + Threshold, CurrentSales < Baseline - Threshold ), "异常", "正常" ) - 8.2.6 在数据透视表中标记异常值 (条件格式)
- 8.3 基于 EWMA 控制图的预警实现 (VBA + DeepSeek 辅助计算)
- 8.3.1 原理简述:指数加权移动平均,对近期数据赋予更高权重,更敏感于微小偏移。
- 8.3.2 公式: $$ z_t = \lambda x_t + (1 - \lambda) z_{t-1} $$ 其中 $z_t$ 是 t 时刻的 EWMA 值,$x_t$ 是 t 时刻的观测值 (如当日销售额),$\lambda$ 是平滑因子 (0 < $\lambda$ <= 1)。
- 8.3.3 控制限计算 (较复杂,可借助 DeepSeek 解释或生成计算逻辑)。
- 8.3.4 实现思路:
- 使用 VBA 在后台计算每个产品/门店的时间序列 EWMA。
- 存储历史 EWMA 值和当前值。
- 比较当前观测值与基于 EWMA 的预测区间。
- 8.3.5 DeepSeek 的作用:
- 帮助理解 EWMA 公式和参数选择 ($\lambda$ 的影响)。
- 辅助编写计算 EWMA 和控制限的 VBA 代码。
- 解释预警结果 (结合其他因素判断是否为真异常)。
- 8.4 基于业务规则的预警实现 (DAX/VBA)
- 8.4.1 负库存预警:
Negative Inventory Alert = IF( CALCULATE( SUM(Inventory[StockQuantity]), LASTNONBLANK(Calendar[Date], 1) // 获取最新库存快照 ) < 0, "负库存!", "" ) - 8.4.2 超低库存预警 (低于安全库存):
Low Inventory Alert = VAR CurrentStock = CALCULATE(SUM(Inventory[StockQuantity]), LASTNONBLANK(Calendar[Date], 1)) VAR SafetyStock = RELATED(Products[SafetyStockLevel]) // 假设安全库存存储在Products表 RETURN IF( CurrentStock < SafetyStock, "库存过低!", "" ) - 8.4.3 呆滞库存预警 (长期无销售且库存高):
Slow-Moving Alert = VAR DaysSinceLastSale = CALCULATE( MAX(Calendar[Date]), FILTER( ALL(Sales), Sales[ProductID] = EARLIER(Products[ProductID]) // 需在行上下文中 ) ) // 获取该产品最后一次销售日期 VAR DaysNoSale = IF(ISBLANK(DaysSinceLastSale), 999, TODAY() - DaysSinceLastSale) // 假设TODAY() VBA或最新日期 VAR CurrentStock = CALCULATE(SUM(Inventory[StockQuantity]), LASTNONBLANK(Calendar[Date], 1)) RETURN IF( AND( DaysNoSale > Products[SlowMovingThreshold], // 假设阈值存储在Products表 CurrentStock > 0 ), "呆滞库存!", "" )
- 8.4.1 负库存预警:
- 8.5 预警信息汇总与输出
- 8.5.1 创建“预警汇总”表或工作表。
- 8.5.2 使用 DAX 度量值或 VBA 将上述各种预警结果汇总到该表。
- 列出异常项目 (产品、门店、日期)。
- 标明异常类型 (销售突增、突降、负库存、低库存、呆滞)。
- 记录异常值、基准值、偏差程度。
- 8.5.3 设计清晰的预警信息格式。
- 8.1 异常检测方法论选择
-
第六步:自动化与通知 - VBA 实战
- 9.1 定时自动刷新
- 9.1.1 VBA 定时器 (
Application.OnTime) - 9.1.2 自动刷新 Power Query 查询 (
QueryTable.Refresh) 和 数据透视表 (PivotTable.RefreshTable)
- 9.1.1 VBA 定时器 (
- 9.2 自动检测预警汇总表变化
- 9.2.1 工作表事件 (
Worksheet_Change) - 9.2.2 检查“预警汇总”表是否有新增行或特定单元格变化。
- 9.2.1 工作表事件 (
- 9.3 自动通知机制
- 9.3.1 电子邮件通知 (Outlook 集成)
Sub SendEmailAlert() Dim OutApp As Object Dim OutMail As Object Dim strBody As String ' 创建 Outlook 实例 Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) ' 构建邮件正文 (strBody),可以从预警汇总表获取内容 strBody = "发现数据异常,请及时处理!" & vbCrLf & vbCrLf strBody = strBody & "详情请查看附件或登录系统。" ' 可以拼接具体预警信息 With OutMail .To = "recipient@example.com" ' 收件人 .CC = "manager@example.com" ' 抄送 .Subject = "数据异常预警报告 - " & Format(Now(), "yyyy-mm-dd hh:mm") .Body = strBody ' 如果需要,添加工作簿作为附件 (.Attachments.Add) .Display ' 或 .Send 直接发送 End With Set OutMail = Nothing Set OutApp = Nothing End Sub - 9.3.2 Teams/钉钉等消息通知 (需调用相应 Webhook API,可请 DeepSeek 辅助编写 HTTP 请求代码)
- 9.3.3 在 Excel 内弹出消息框 (
MsgBox)
- 9.3.1 电子邮件通知 (Outlook 集成)
- 9.4 整合:在检测到新预警后触发通知
- 9.4.1 在
Worksheet_Change事件中调用SendEmailAlert或通知函数。 - 9.4.2 避免重复通知 (记录上次通知时间或已处理预警)。
- 9.4.1 在
- 9.1 定时自动刷新
-
第七步:构建监控仪表盘
- 10.1 整合分析结果与预警信息
- 10.2 设计布局:KPI 区、分析图表区、预警列表区。
- 10.3 设置动态交互:利用切片器、时间线控件联动控制整个仪表盘。
- 10.4 突出显示预警区域 (颜色、图标)。
- 10.5 添加数据刷新按钮 (链接到 VBA 宏)。
- 10.6 添加“查看详情”按钮 (链接到具体数据表或分析报告)。
-
优化与高级技巧
- 11.1 性能优化
- 11.1.1 Power Query 查询优化 (减少步骤、合并查询、使用索引列)
- 11.1.2 DAX 优化 (避免迭代器滥用、使用 CALCULATE 替代 FILTER、使用变量)
- 11.1.3 数据模型优化 (减少列、使用合适的数据类型)
- 11.2 安全性考虑
- 11.2.1 工作簿保护
- 11.2.2 VBA 工程密码保护
- 11.2.3 敏感数据脱敏 (在 Power Query 中处理)
- 11.3 错误处理 (VBA 中的
On Error Resume Next,Err对象) - 11.4 日志记录 (记录刷新时间、预警触发时间)
- 11.5 结合 DeepSeek 进行更复杂的分析
- 11.5.1 时间序列预测 (未来销售额、库存需求)
- 11.5.2 根因分析 (DeepSeek 帮助解读异常的可能原因)
- 11.5.3 生成自然语言分析报告摘要
- 11.1 性能优化
-
总结
- 12.1 回顾 DeepSeek + Excel 工作流的核心价值
- 12.2 强调多表联动分析与自动预警的关键实现步骤
- 12.3 展望:AI 与 BI 工具的深度融合趋势
-
附录
- A. 示例数据表结构 (字段说明)
- B. 关键 DAX 度量值汇总
- C. 核心 VBA 代码片段汇总
- D. DeepSeek 交互提示词示例 (用于获取帮助)
- E. 推荐学习资源 (Excel, Power BI, DAX, VBA, DeepSeek)
详细内容展开 (示例节选 - 以第8节“异常数据自动预警机制”部分为例):
(接上文第8节)
8.1 异常检测方法论选择
在构建预警系统前,选择合适的异常检测方法至关重要。常见的方法有:
- 统计方法 (Statistical Methods): 基于数据的统计分布特性来判断异常。
- 标准差法 (Z-Score): 计算数据点与均值的偏差,用标准差单位衡量。简单直观,假设数据服从正态分布(或近似)。公式:$$ z = \frac{x - \mu}{\sigma} $$ 其中 $x$ 是观测值,$\mu$ 是均值,$\sigma$ 是标准差。通常 |z| > 2 或 3 被认为是异常。优势: 计算简单,易于在 DAX 中实现。劣势: 对极端值本身敏感(影响 $\mu$ 和 $\sigma$),不适用于非高斯分布或小样本。
- 移动平均法 (Moving Average): 计算一定窗口内数据的平均值作为基准线,当前值显著偏离此线则视为异常。优势: 能反映近期趋势。劣势: 滞后性,对窗口大小敏感。
- 指数加权移动平均控制图 (Exponentially Weighted Moving Average - EWMA): 对 MA 的改进,赋予近期数据更高权重。公式如前所述。优势: 对小偏移更敏感,能更快检测到过程漂移。劣势: 计算稍复杂,需要选择合适的平滑因子 $\lambda$ 和控制限参数。VBA 实现更灵活。
- 业务规则法 (Business Rules): 基于领域知识和业务逻辑定义硬性阈值。例如,“库存低于安全库存水平”、“销售金额为负数”、“连续30天无销售且库存大于0”。优势: 规则明确,易于理解和实现。劣势: 可能不够灵活,无法捕捉统计意义上的异常模式。
- AI 辅助判断 (DeepSeek): 利用 DeepSeek 的自然语言理解和模式识别能力。可以向 DeepSeek 描述数据特征、历史模式、当前异常点,询问其是否合理或可能的原因。优势: 能结合上下文,处理复杂的、非数值型的异常(如文本描述矛盾),提供解释性。劣势: 依赖提示词质量,需要人工复核,不能完全自动化替代规则。
实战建议: 通常组合使用这些方法。例如:
- 用业务规则处理明确的逻辑错误(如负库存)。
- 用统计方法(Z-Score 或 EWMA)检测数值型指标的显著波动。
- 将初步筛选出的异常点,结合 DeepSeek 进行二次判断,提供更丰富的背景信息和可能的原因分析,减少误报。
8.2 基于标准差法的预警实现 (DAX/Power Pivot)
我们以检测单日门店销售额异常为例,详细说明如何在 DAX 中实现标准差法预警。
(1) 计算历史基准值 (Sales Baseline (30d)) 我们需要计算过去 30 天(不包括今天)的日均销售额作为基准 $\mu$。这里使用 DATESINPERIOD 函数创建时间段。
Sales Baseline (30d) =
CALCULATE(
[Avg Daily Sales], // 这是之前定义的日均销售额度量值
DATESINPERIOD(
Calendar[Date],
LASTDATE(Calendar[Date]) - 30, // 基准期结束日期 (昨天)
-30, // 向前推30天
DAY
)
)
解释:LASTDATE(Calendar[Date]) 获取模型中最后一个日期(假设是最新销售数据日期)。LASTDATE(Calendar[Date]) - 30 得到 30 天前的日期。DATESINPERIOD 从这个日期开始,往回取 30 天(-30)的日期范围。然后在这个范围内计算 [Avg Daily Sales]。
(2) 计算历史标准差 (Sales StdDev (30d)) 计算同一时间段内,每日销售额的标准差 $\sigma$。由于 STDEV.P 函数期望单列值,而 [Total Sales] 在日期上下文中是标量,我们需要使用 STDEV.PX (或 STDEVX.P) 函数,它接受一个表(这里是 VALUES(Calendar[Date]))和一个表达式([Total Sales])来计算标准差。
Sales StdDev (30d) =
CALCULATE(
STDEV.PX(
VALUES(Calendar[Date]), // 构成每日销售额的日期列表
[Total Sales] // 每个日期的总销售额
),
DATESINPERIOD(
Calendar[Date],
LASTDATE(Calendar[Date]) - 30,
-30,
DAY
)
)
(3) 定义异常阈值 & 判断异常 (Is Sales Outlier) 设定阈值为 基准值 ± 2 * 标准差。比较当前日期(LASTDATE(Calendar[Date]))的销售额是否超出此范围。
Is Sales Outlier =
VAR CurrentDate = LASTDATE(Calendar[Date]) // 当前分析的最新日期
VAR CurrentSales = CALCULATE([Total Sales], Calendar[Date] = CurrentDate) // 当前日销售额
VAR Baseline = [Sales Baseline (30d)] // 过去30天日均基准
VAR StdDev = [Sales StdDev (30d)] // 过去30天标准差
VAR UpperThreshold = Baseline + 2 * StdDev // 上阈值
VAR LowerThreshold = Baseline - 2 * StdDev // 下阈值
RETURN
IF(
OR(
CurrentSales > UpperThreshold,
CurrentSales < LowerThreshold
),
"异常", // 如果超出阈值
"正常" // 否则
)
(4) 应用与可视化
- 在数据透视表中,将
StoreName(门店),Calendar[Date],[Total Sales],[Is Sales Outlier]拖入行区域或值区域。 - 对
[Is Sales Outlier]列应用条件格式,当值为“异常”时,将整行或销售额单元格标记为醒目的颜色(如红色)。 - 可以添加一列显示偏差程度:
Deviation = [Total Sales] - [Sales Baseline (30d)]。
这样,刷新数据后,就能直观地看到哪些门店在哪天的销售额出现了显著异常。
结语
通过本教程的学习,您应该能够掌握利用 DeepSeek 的强大 AI 能力赋能 Excel,构建一套完整的多表联动分析系统和智能异常数据自动预警流程。这套方案将显著提升您从海量、复杂数据中提取洞察的速度和深度,并实现关键业务风险的实时监控与快速响应。请结合附录中的资源,不断练习和探索,将这套强大的组合应用到您实际的工作场景中,释放数据的真正价值。
更多推荐

所有评论(0)