Power BI 面试问题
作者 Aaron Cao · 更新于

Power BI 面试聚焦于 DAX 求值上下文、数据建模和刷新架构。你需要能说明度量值与计算列的区别、解释筛选上下文与行上下文、为星型架构给出理由、在 Import 与 DirectQuery 之间做取舍,并设置行级安全性(RLS)。
每一轮都会出现哪些 DAX 问题?
你可以做出一份能跑起来的报表,却依然在 DAX 问题上卡壳,因为面试考察的是求值模型本身,而不是函数清单。本节涵盖几乎每场 Power BI 面试都会出现的 DAX 问题,以及一个扎实的回答应包含什么。
- 度量值和计算列有什么区别? 计算列在刷新期间逐行计算并存储在模型中,占用内存。度量值在查询时针对当前筛选上下文计算,不存储任何内容。要说清内存占用和计算时机,而不只是“一个是动态的”。
- 解释一下行上下文和筛选上下文。 行上下文是迭代过程中的当前行,筛选上下文是切片器、视觉对象和 DAX 施加的一组筛选。大多数令人困惑的结果都源于预期一种上下文却得到了另一种。
- CALCULATE 的作用是什么? 它在修改后的筛选上下文中计算一个表达式,并把行上下文转换为筛选上下文。面试官最想听到的就是后半句。
- 什么时候需要像
SUMX这样的迭代函数? 当计算必须先逐行进行、再聚合时,例如单价乘以数量,而模型中没有存储乘积列。 ALL的作用是什么,为什么要与 CALCULATE 搭配使用? 它会移除筛选,这正是构建占比类度量值的方法。- 解释一下
RELATED与RELATEDTABLE的区别。 方向很关键:一个是跨到“一”的一侧,另一个是从“多”的一侧返回多行。
整场面试都适用的一个习惯:当 DAX 回答开始说不清楚时,就回到“上下文”这个概念。几乎所有追问最终都归结为当前是哪种上下文、又是什么改变了它。
数据建模问题应该怎么回答?
建模问题能把只会搭报表的人和真正能负责数据集的人区分开来。这里期望的是维度建模的词汇。
- 星型架构还是雪花架构?为什么? 星型架构,因为查询性能更好、DAX 更简单,维度采用反规范化设计。只有当某个维度确实很大或被多方共享时才用雪花架构。用单一大表回答,面试基本会提前结束。
- 什么是事实表,什么是维度表? 事实表以指定的粒度存放可度量的事件,维度表存放你用来切片的属性。
- 为什么关系的基数和交叉筛选方向很重要? 单向的一对多是默认设置,这是有原因的;双向筛选会带来歧义,还可能算出错误的总计。
- 多对多关系该怎么处理? 用一张桥接表,并说明之后的总计具体代表什么含义。
- 为什么需要一张专门的日期表? 时间智能函数需要一张连续且标记好的日期表;没有它,年初至今和去年同期的度量值都会出错。
- 这个转换该放在 Power Query 里做,还是用 DAX? 能在 Power Query 里做就在那里做整形,因为那里的转换只在刷新时执行一次,而不是每次查询都执行。
一位为零售报表团队面试的 BI 分析师被问到:为什么销售总额按产品看是对的,按地区看却不对。面试官想要的答案是建模层面的:双向关系造成了有歧义的筛选路径,而不是重写 DAX。先从模型层面去诊断,才是他们在考察的本能。
更多按岗位划分的题库见按角色划分的面试问题。
关于刷新、安全和部署,他们会问什么?
这些问题多出现在 BI 开发工程师和分析工程师的面试中,也正是那些只在 Power BI Desktop 里搭建过报表的候选人会没话可说的地方。
- Import、DirectQuery 还是 Composite? Import 查询最快,但受限于内存和刷新窗口。DirectQuery 能保持数据最新,但会把负载推给数据源,且存在 DAX 限制。Composite 则是两者混合。要说出取舍,以及决定选哪个的那一个关键条件。
- 本地数据网关是做什么用的? 用于把云服务连接到企业网络背后的数据源,支持定时刷新和 DirectQuery。
- 增量刷新是怎么工作的? 按日期范围分区,让只有最近的分区需要重新加载,并按该功能要求的范围参数进行配置。
- 你会怎么实现行级安全性? 用带有 DAX 筛选表达式的角色作用在维度表上,并用当前登录用户函数在映射表中查找该用户,实现动态安全性。
- 工作区、应用、数据集、报表之间是什么关系? 这是基础的服务层面常识,也是一个只在 Desktop 里做过事的人很容易答错的简单问题。
- 你会怎么优化一份很慢的报表? 减少每页的视觉对象数量,优先用度量值而不是计算列,降低关系列上的基数,并用性能分析器排查。
如果你的经验完全限于 Desktop,就直说,并说明你还需要学什么。面试官能接受被明确说出的短板;他们不能接受被编出来的部署经验,因为下一个追问就会拆穿它。
Power BI 面试该怎么练习?
Power BI 的回答一开口就会以一种特定的方式露馅:候选人明明知道区别在哪里,却说得绕来绕去,因为他从来只是靠点鼠标来“演示”这个区别,而不是靠说出来。读题库能带来的只是“眼熟”,而这种眼熟一旦遇到陌生人当面发问、还在等你回答,就会瞬间崩塌。
从上面的问题里挑出你最不想被问到的五个,不看屏幕,在九十秒内大声说出每一个的答案。如果你连 CALCULATE 是做什么的都得画图才能说清楚,那你在面试现场也说不清楚。相比重读笔记,用会追问的 AI 面试官反复练习这些问题更接近真实对话,这正是 模拟面试 模式的设计初衷。
SubcueAI 创始人 Aaron Cao 把这个练习模式的重心放在了“反复开口说”上,而不是内容本身的呈现,因为题目清单从不稀缺,稀缺的是开口说的次数。在真实面试中,桌面客户端和浏览器扩展的侧边栏可以在面试官讲话时同步呈现结构,这对你本就熟悉的内容帮助最大。设置步骤见使用教程页面。