简介本资源是一份面向高校信息管理、大数据或计算机相关专业学生的《商务智能》课程复习题集聚焦数据仓库、OLAP/OLTP对比、数据挖掘核心任务关联规则、聚类、分类、CRM与KDD等关键考点助力期末备考与概念辨析。压缩包为单个Word文档.doc大小121KB内容结构清晰含27道典型选择题及详细解析覆盖数据粒度、元数据定义、OLAP多维分析特性、数据预处理步骤、特征选择方法等易错难点每题均标注正确选项并附原理说明便于自主检测与知识巩固。目前已有116人学习下载适合作为课堂补充练习、考前冲刺自测或教师组卷参考轻量便携即下即用。1. 商务智能复习题不是考前突击清单而是数据决策能力的体检表很多人把“商务智能复习题”当成期末划重点的速成资料但真正用过 Power BI 做销售漏斗分析、用 SQL 诊断客户流失归因、用 Tableau 搭建实时库存看板的从业者清楚一套高质量的复习题本质是一套可验证、可回溯、可分层的能力校准工具。它覆盖从数据建模合理性比如星型模型中事实表与维度表的粒度对齐、DAX 公式语义边界CALCULATE的上下文传递规则、ETL 错误处理策略空值/类型不匹配/增量键冲突到仪表盘交互设计原则下钻路径是否符合业务动线、KPI 卡片是否标注数据时效的完整链路。适合三类人刚通过 CDA 或 CBIP 认证考试需巩固实操逻辑的新人正在准备 BI 工程师岗位技术面试的转岗者以及团队负责人用它快速识别组员在数据清洗、指标口径对齐、性能调优等环节的真实断点。它不替代项目实战但能暴露你“以为会”和“真能跑通”之间的那层薄冰。2. 用真实业务场景拆解商务智能核心考点从数据源到可视化交付的全链路验证商务智能复习题的价值不在选择题答案本身而在于每道题背后映射的生产环境典型断点。我们以“某电商公司月度复盘报告”为基准场景还原一套题如何覆盖数据接入、建模、计算、呈现四层能力。2.1 数据接入层识别连接器选型与增量同步陷阱真实业务中订单库MySQL每日新增 50 万行用户行为日志Parquet 文件按小时分区存储CRM 系统Salesforce API仅支持全量拉取。复习题常设陷阱题“若要求订单表每日凌晨 2 点同步最新 24 小时数据且避免重复写入应选用哪种同步策略”正确答案不是“全量覆盖”而是“基于order_created_time字段的增量查询 目标表WHERE条件去重”。这对应 Power Query 中的关键操作// Power Query M 代码安全增量加载订单表 let Source MySql.Database(prod-db.example.com, sales_db), Orders Source{[Schemapublic, Itemorders]}[Data], // 关键添加时间过滤避免全表扫描 FilteredOrders Table.SelectRows(Orders, each [order_created_time] DateTime.LocalNow() - #duration(1,0,0,0)), // 关键确保目标表无重复主键假设 order_id 为主键 Deduplicated Table.Distinct(FilteredOrders, {order_id}) in Deduplicated提示DateTime.LocalNow()在调度执行时返回服务器本地时间若数据库时区为 UTC8需用DateTime.UtcNow() #duration(0,8,0,0)对齐。复习题中若出现“同步后数据量翻倍”大概率是未加主键去重或增量条件写成而非导致当日数据重复加载。2.2 数据建模层星型模型构建与关系验证的实操检查点商务智能的建模错误80% 源于维度表与事实表的粒度错配。复习题常给出一张“销售事实表”含order_id,product_id,store_id,sale_amount,sale_date字段再提供“产品维度表”含product_id,category,brand,launch_date要求判断“能否直接建立product_id关系”。答案是否定的——因为若产品维度表中存在同一product_id多条记录如品牌变更历史则关系将触发多对一模糊关联导致SUM(sale_amount)计算失真。验证方法必须落地到工具操作在 Power BI Desktop 中右键点击关系线 → “管理关系” → 查看“交叉筛选方向”是否为“单向”事实表→维度表并确认“基数”显示为“:1”而非“: *”执行 DAX 测试公式COUNTROWS(DISTINCT(Products[product_id])) COUNTROWS(Products)返回TRUE才表示维度表无重复主键2.2.1 维度退化何时该把日期字段拆成独立维度表当复习题问“销售事实表中sale_date字段是否需要单独建日期维度表”标准答案是只要涉及年/季度/月/周/工作日等层次分析就必须建。原因在于直接用YEAR(Sales[sale_date])计算年份在大表上无法利用列存储索引加速无法支持自定义节假日标记如is_chinese_new_year TRUE无法实现“滚动 12 个月”等动态时间智能计算建表脚本示例T-SQL-- 创建日期维度表覆盖 2020-2030 年 WITH DateCTE AS ( SELECT CAST(2020-01-01 AS DATE) AS date_val UNION ALL SELECT DATEADD(day, 1, date_val) FROM DateCTE WHERE date_val 2030-12-31 ) SELECT date_val AS date_key, YEAR(date_val) AS year_num, DATEPART(quarter, date_val) AS quarter_num, MONTH(date_val) AS month_num, DATENAME(weekday, date_val) AS weekday_name, CASE WHEN DATEPART(weekday, date_val) IN (1,7) THEN 1 ELSE 0 END AS is_weekend INTO dim_date FROM DateCTE OPTION (MAXRECURSION 0);2.3 计算层DAX 公式语义与性能陷阱的双重校验复习题中高频考点是CALCULATE的上下文转换。例如“计算各品类销售额占总销售额百分比”时若写成DIVIDE([Total Sales], CALCULATE([Total Sales], ALL(Products))), 表面正确但实际在矩阵视觉对象中可能失效——因为ALL(Products)会清除所有产品维度筛选包括用户当前选择的category导致分母恒为全局总和而非同品类内占比。正确解法必须绑定筛选上下文Category Sales % VAR CurrentCategory SELECTEDVALUE(Products[category]) RETURN DIVIDE( [Total Sales], CALCULATE([Total Sales], ALLEXCEPT(Products, Products[category]) // 仅保留 category 筛选清除其他维度干扰 ) )函数适用场景复习题常见错误验证方式ALL()清除指定表所有筛选误用于需保留部分筛选的场景在报表中切换不同品类观察分母是否随品类变化ALLEXCEPT()清除表中除指定列外的所有筛选漏写表名或列名导致语法错误DAX Studio 中执行EVALUATE ROW(test, [Category Sales %])并传入不同category值KEEPFILTERS()在CALCULATE内部保留外部筛选器与ALL()混用造成逻辑冲突用 Performance Analyzer 查看查询计划确认筛选器是否被正确继承3. 商务智能复习题的实战应用用错题驱动 ETL 流程与仪表盘优化把复习题当作静态试卷就浪费了它的最大价值。真正高效的用法是将其转化为可执行的流程改进清单。我们以一道典型错题为例展示如何反向驱动生产环境优化。3.1 从“指标口径不一致”错题定位数据治理断点复习题常设情景“财务部提供的月度营收为 1200 万元BI 报表显示为 1150 万元请分析差异原因”。标准答案指向三个层面数据源层财务系统导出 Excel 使用SUMIFS按invoice_statuspaid计算而 BI 从 ERP 取数时WHERE status IN (shipped,delivered)漏掉了已付款但未发货的订单建模层ERP 中revenue_amount字段含增值税财务报表已剔除税额BI 模型未做revenue_amount / 1.13税率折算呈现层BI 仪表盘 KPI 卡片使用FORMAT([Revenue], Currency)而财务要求按万元单位四舍五入非千分位落地修复步骤在 Power BI 数据视图中为revenue_amount列添加新列Revenue_Excl_VAT Sales[revenue_amount] / 1.13修改事实表关联逻辑在 Power Query 中合并订单主表与财务状态表用Table.Join确保invoice_id匹配并添加Is_Finance_Paid if [finance_status]paid then true else false更新 KPI 卡片值表达式Revenue (Wan) ROUND([Revenue_Excl_VAT]/10000, 0)注意ROUND函数在 DAX 中对整数精度敏感若原始值为11523456.78ROUND(11523456.78/10000,0)返回1152而财务要求“四舍五入到万元”需用ROUND([Revenue_Excl_VAT]/10000,0)二者结果一致但语义更清晰。3.2 用“仪表盘加载缓慢”错题触发查询性能调优当复习题问“某销售看板首次加载耗时 45 秒如何优化”答案不能只写“建索引”或“减少字段”。必须给出可验证的诊断路径启用 Power BI 性能分析器在报表编辑模式下点击“视图”→“性能分析器”→“开始录制”刷新看板导出.json分析报告定位瓶颈查询在报告中查找Duration 5000ms 的 DAX 查询重点关注VertiPaq扫描行数ScanCount与返回行数OutputCount比值针对性优化若发现OutputCount仅 100 行但ScanCount达 500 万行说明存在低效筛选。例如原公式Active Customers COUNTROWS( FILTER(Customers, Customers[first_order_date] MAX(Date[date_key]) Customers[last_order_date] MIN(Date[date_key]) ) )应改为预计算标志列// Power Query 中添加列 Is_Active if [first_order_date] Date.EndOfMonth(Date.From(DateTime.LocalNow())) and [last_order_date] Date.StartOfMonth(Date.From(DateTime.LocalNow())) then true else false再用简单计数COUNTROWS(FILTER(Customers, Customers[Is_Active] TRUE()))3.2.1 关键参数表商务智能性能调优必查项检查项合理阈值检测命令/位置优化手段模型大小 1GB云端/ 2GB本地Power BI Desktop → 文件 → 选项 → 当前文件 → “模型大小”删除未使用列、启用“自动检测数据类型”、对文本列启用“Unicode 编码”压缩DAX 查询扫描行数单次查询 100 万行性能分析器中ScanCount字段用SUMMARIZE替代FILTER嵌套、避免在CALCULATE中使用FILTER视觉对象数据点数单图表 5000 点性能分析器中OutputCount启用“数据类别”设置为“类别”、关闭“显示空值”、用切片器替代高基数字段筛选4. 商务智能复习题的进阶用法构建可验证的指标一致性测试框架把复习题升级为自动化测试资产是资深 BI 工程师与初级使用者的核心分水岭。其关键不是手写测试用例而是建立一套能对接生产环境、自动比对结果的轻量级验证框架。4.1 用 Python pytest 实现指标口径自动化校验以“月活跃用户数MAU”指标为例复习题常考其定义“当月至少完成 1 次有效交易的独立用户数”。我们将其转化为可执行测试# test_mau_consistency.py import pandas as pd import pytest from sqlalchemy import create_engine def get_bi_mau(): 从 Power BI 数据集 API 或导出 CSV 获取 BI 系统 MAU 值 # 实际中可调用 Power BI REST API / 或读取导出的 .pbix 解包数据 return 124500 def get_warehouse_mau(): 从数仓直接查询作为黄金标准 engine create_engine(postgresql://user:passhost/db) query SELECT COUNT(DISTINCT user_id) as mau FROM fact_orders WHERE order_date 2024-05-01 AND order_date 2024-06-01 AND order_status completed result pd.read_sql(query, engine) return int(result.iloc[0][mau]) def test_mau_consistency(): bi_value get_bi_mau() warehouse_value get_warehouse_mau() # 允许 0.5% 的 ETL 延迟误差如凌晨 2 点同步测试在 3 点执行 tolerance warehouse_value * 0.005 assert abs(bi_value - warehouse_value) tolerance, \ fMAU 不一致BI{bi_value}, 数仓{warehouse_value}, 差值{abs(bi_value - warehouse_value)} if __name__ __main__: pytest.main([__file__, -v])运行后输出test_mau_consistency.py::test_mau_consistency PASSED4.2 将复习题转化为数据质量监控规则把错题中的典型问题映射为数据质量平台如 Great Expectations的检查规则。例如复习题“订单表中payment_method字段出现 NULL 值导致漏算支付金额”对应规则# expectations_config.py from great_expectations.dataset import PandasDataset def add_payment_method_rules(dataset: PandasDataset): # 规则1payment_method 不能为空 dataset.expect_column_values_to_not_be_null(payment_method) # 规则2payment_method 只能是预设枚举值 dataset.expect_column_values_to_be_in_set( payment_method, value_set[alipay, wechat_pay, credit_card, bank_transfer] ) # 规则3NULL 值比例 0.1% dataset.expect_column_proportion_of_unique_values_to_be_between( payment_method, min_value0.999, max_value1.0 ) return dataset部署后当 ETL 任务执行完毕自动触发此检查失败时发送企业微信告警“订单表 payment_method 字段 NULL 值占比 2.3%超出阈值 0.1%请检查支付网关接口异常”。4.2.1 复习题驱动的数据质量看板设计要点复习题考点对应数据质量维度监控指标可视化建议“维度表主键重复”完整性COUNT(DISTINCT product_id) / COUNT(*)红绿灯指示器0.999 亮红灯“事实表时间字段超出业务范围”有效性MIN(sale_date)和MAX(sale_date)与当前日期偏差天数折线图标注异常点如出现 2035 年订单“指标计算结果与上游系统不一致”一致性ABS(BI_value - Source_value) / Source_value散点图X轴为源系统值Y轴为BI值理想状态为 YX 线真正的商务智能能力不体现在背熟多少复习题答案而在于看到一道题时能立刻调出自己上周刚修复的某个 Power Query 错误、想起上个月因 DAX 上下文搞错导致的报表事故、或者打开终端运行一行pytest验证指标一致性。把复习题当作一面镜子照见自己在数据管道每个环节的真实掌控力才是它不可替代的价值。本文还有配套的精品资源点击获取