模型的设计和优化是一门科学,也是一门艺术。如果你想深入学习这部分内容,还需要接触类似缓慢变化维、代理键这些专业词汇,Power BI 官方文档中对这部分内容有比较详细的介绍,可以参考文末的扩展阅读链接,作为基础章节,这里不对星型模型和雪花模型做深入介绍,但仍有一点值得指出:星型模型是更适合 Power BI 建模使用的结构
上文中我们提到了一个很重要的信息:星型模型是更适合 Power BI 建模使用的结构,这不仅是出于减少数据冗余的考虑,因为对于列式数据库来说,即使有一定的冗余也可以被引擎很好的压缩,更主要的原因是从计算准确性角度给出的建议。虽然宽表形式(所有的维度和指标都汇总到一张表)被很多 BI 工具或者分析系统采用,但是在 Power BI 中使用这种结构,在某些计算时可能导致异常结果。
Tabular Model 本身不适合展示大数据量下涉及大量维度的明细级别数据,会遇到较为明显的性能问题,Pagniated Report 是更合适的工具。
不合理的模型结构带来的其他问题
单纯强调模型结构的重要性可能没法让你产生直观感受,这里我用反面案例来说明,一个糟糕的模型可能给你带来哪些问题,如果你过去习惯于在 Excel 里分析数据,那这部分内容是你需要特别关注的,很多使用者在切换到 Power BI 后,由于没有真正理解模型结构的重要性,在这上面走了很多弯路。
从二维表到一维表
如果之前你习惯使用左边的二维表结构,切换到 Power BI 后,请务必将数据源转为右边的一维表形式,将每个维度的所有成员置于一列中。原因是二维表在数据展现上较为直观,但牺牲了数据汇总和切分的灵活性。比如想计算关羽总分,你需要定义公式:关羽总分=SUM(B22),而对于一维表,只需要定义 总分 = SUM(表[成绩]),就可以在报表层实现对任意人员、任意科目的汇总计算。
由于 Excel 的数据处理和展现都在 sheet 里完成,这让很多使用者并没有对两者的区别有清晰的感知,实际上这是数据分析过程中的两个不同的环节,在 Power BI 中,数据存储的结构不影响数据的展现,两者是相互独立的。使用一维形式存储的数据在报表设计时仍然可以自由选择展现形式。
不必担心转换带来的的数据源行数增加,Power BI 使用列式存储模式,对于存在重复值的行有很好的压缩效果。一旦完成了思维方式上的转变,你会发现模型有很多灵活之处。二维表到一维表的转换可以通过编辑查询 – 逆透视一键完成,还有一个透视功能可以实现反向操作,在某些情况下可能会用到。