
本文由微软MVP(最有价值专家)实战经验提炼,涵盖从数据清洗到高级DAX的完整技巧体系,助你从“会操作”进阶到“精通分析”。
一个真正的Power BI数据分析师,需要掌握四个层次的技巧:
层次四:故事讲述层 → 可视化设计、报告布局、用户交互
层次三:模型构建层 → 关系设计、DAX计算、性能优化
层次二:数据准备层 → 清洗、转换、整合、数据建模
层次一:数据连接层 → 多源接入、增量刷新、权限管理MVP级认知:80%的分析问题出在数据模型层,而不是图表层。
场景 | 技巧 | 操作要点 |
|---|---|---|
合并多个工作表 | 文件夹合并 | 使用Excel.Workbook函数自动遍历 |
逆透视数据 | 二维表转一维表 | 选中多列 → 逆透视其他列 |
条件列 | 替代IF嵌套 | 添加条件列UI,支持多条件分支 |
模糊匹配 | 合并查询中的近似匹配 | 阈值设为0.8,避免漏匹配 |
分列到行 | 单元格拆分为多行 | 按分隔符分列 → 逆透视 |
□ 检查数据类型(日期、数字、文本是否正确识别)
□ 处理空值(根据业务逻辑填充或删除)
□ 删除重复行(区分“去重”和“保留首次出现”)
□ 统一维度成员(“北京”和“北京市”需要映射)
□ 添加日期表(时间智能函数的前提)
□ 验证数据完整性(行数、总和与源系统核对)一个标准日期表应包含:
快速生成M代码:List.Dates 配合 #date 函数生成连续日期
法则 | 说明 | 反例 |
|---|---|---|
星型模型优先 | 一个事实表 + 多个维度表 | 雪花模型过度规范化 |
单向筛选为主 | 维度筛选事实,事实不筛选维度 | 双向筛选导致歧义 |
每个字段唯一归属 | 字段只出现在一个表 | 订单金额同时出现在维度和事实 |
数值放事实表 | 可加性数值(金额、数量) | 单价这种半可加性要特殊处理 |
类别 | 最常用函数 | 典型场景 |
|---|---|---|
聚合 | SUM, AVERAGE, MIN, MAX | 基础计算 |
筛选 | CALCULATE, FILTER, ALL, REMOVEFILTERS | 条件计算 |
时间智能 | TOTALYTD, SAMEPERIODLASTYEAR, DATESBETWEEN | 同期/环比/累计 |
表操作 | SUMMARIZE, ADDCOLUMNS, SELECTCOLUMNS | 中间表构建 |
逻辑 | SWITCH, IF, ISBLANK | 条件判断 |
统计 | RANKX, TOPN, COUNTROWS | 排名和分类 |
1. 累计至今
Sales YTD =
TOTALYTD(SUM(Sales[Amount]), 'Date'[Date])2. 同比(去年同期)
Sales PY =
CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR('Date'[Date]))3. 环比(上月)
Sales PM =
CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH('Date'[Date]))4. 移动平均(3个月)
Sales MA 3M =
CALCULATE(
AVERAGEX(VALUES('Date'[Month]), SUM(Sales[Amount])),
DATESINPERIOD('Date'[Date], LASTDATE('Date'[Date]), -3, MONTH)
)5. 排名
Sales Rank =
RANKX(ALL(Product[ProductName]), SUM(Sales[Amount]))6. 占比(占总计百分比)
% of Total =
DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALLSELECTED()))7. 动态分组(SWITCH)
Sales Group =
SWITCH(TRUE(),
[Sales Amount] >= 10000, "A级",
[Sales Amount] >= 5000, "B级",
"C级"
)8. TOP N筛选
Top 10 Products =
CALCULATE(SUM(Sales[Amount]), TOPN(10, Product, SUM(Sales[Amount])))9. 与选定值比较
Sales vs Selected =
SUM(Sales[Amount]) - SELECTEDVALUE('Target'[Target Amount])10. 新建空表(用于参数)
Parameter Table = GENERATESERIES(1, 100, 1)问题 | 调试方法 |
|---|---|
结果不对 | 拆成多步,用新建表确认中间结果 |
性能慢 | 避免FILTER全表扫描,用列引用代替 |
看不懂公式 | 使用DAX Studio格式化和逐行解释 |
上下文混淆 | 明确行上下文与筛选上下文区别 |
分析目的 | 推荐图表 | 避免使用 |
|---|---|---|
趋势变化 | 折线图、面积图 | 饼图 |
比较大小 | 条形图、柱状图 | 雷达图 |
占比关系 | 饼图(≤5类)、环形图、树状图 | 3D饼图 |
相关性 | 散点图、气泡图 | 堆积柱状图 |
分布情况 | 直方图、箱线图 | 折线图 |
地理数据 | 地图、着色地图 | 普通柱状图 |
使用性能分析器(Performance Analyzer):
操作 | 效果 | 优先级 |
|---|---|---|
删除不需要的列 | 减少内存 | ★★★★★ |
使用整数代替字符串 | 压缩比高 | ★★★★☆ |
禁用不必要的自动日期/时间 | 减少隐藏表 | ★★★☆☆ |
聚合表(Aggregations) | 大表查询加速 | ★★★☆☆ |
增量刷新 | 减少刷新时间 | ★★★★☆ |
❌ 低效写法:FILTER(ALL(Table), Table[Col] = "X")
✅ 高效写法:CALCULATE(SUM(Amount), Table[Col] = "X")
❌ 低效写法:EARLIER()嵌套
✅ 高效写法:使用变量VAR和行上下文转换
❌ 低效写法:迭代函数内套迭代(SUMX内套FILTER)
✅ 高效写法:先计算中间表,再聚合创建角色 → 添加DAX过滤规则 → 测试角色 → 发布到服务 → 分配成员
示例规则:
[部门] = USERPRINCIPLENAME() // 用户只能看自己部门
[地区] IN {"华北","华东"} // 限制可访问的地区开发工作区 → 测试工作区 → 生产工作区问题现象 | 可能的根因 | 解决方案 |
|---|---|---|
数据显示为空白 | 关系连接错误/筛选冲突 | 检查关系方向、有无其他筛选器 |
度量值结果错误 | CALCULATE上下文理解偏差 | 用CALCULATETABLE测试中间结果 |
刷新超时 | 数据量过大或查询复杂 | 启用增量刷新、添加查询折叠 |
内存不足 | 模型超过可用内存 | 减少列、使用聚合组 |
切片器不同步 | 跨表筛选无有效路径 | 建立共享维度表 |
类型 | 资源名称 | 获取方式 |
|---|---|---|
书籍 | 《DAX权威指南》(The Definitive Guide to DAX) | 纸质/电子书 |
书籍 | 《Power Query M语言从入门到精通》 | 纸质/电子书 |
免费课程 | Microsoft Learn - Power BI学习路径 | 在线 |
视频 | SQLBI(意大利团队,DAX圣经作者) | YouTube |
工具 | DAX Studio | 免费下载 |
工具 | Tabular Editor | 免费/付费版 |
社区 | Power BI 中文社区 | 微信群/论坛 |
Power BI数据分析的技巧,本质上可以归纳为三句话:
数据要干净 —— Power Query解决80%的脏数据问题 模型要稳健 —— 星型模型 + 正确的关系设计 DAX要精准 —— 理解筛选上下文,善用CALCULATE
微软MVP的价值不在于知道所有函数,而在于:
最后一个技巧:永远记住,你的受众是业务决策者,不是技术评审委员会。图表漂亮不如结论清晰,模型复杂不如解释简单。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。