加入 PowerBI自己学 知识星球:下载源文件,边学边练;遇到问题,还可以提问交流。
建模是PowerBI的核心。模型就是把现实用数据模型虚拟出来,让现实中的事物在模型里有相应的体现。模型有了,肚子里面有东西了,就能以可视化的方式去说话、去表达、去解决用户的需求了。
模型OK,事半功倍;模型混乱,事倍功半。模型搭建得简洁、有效,后面的可视化就能水到渠成,否则,模型很乱,包含冗余的表、列、关系,会导致文件大、刷新慢、书写度量值困难、性能低、互动性也不好。而且,模型是底层基础,一定要打牢,如果没有打牢,后期发现模型需要优化,沉没成本很高,可能带来一系列的巨大工作量。
星型架构
在PowerBI中,微软强烈建议使用星型架构搭建模型。
星型架构是把复杂的事情简单化,它充分体现了老子几千年前提到的天下大事必作于细的理念,把大模型拆分成一个个小模型,从一个个小模型做起,组成一个大模型。每一个小模型就是一个星型架构。
在星型架构中,表被区分为维度表和事实表:
维度表描述业务实体,比如日期、人员、产品等。维度表的列描述业务实体的属性。每个维度表都必须具有一个唯一列,此列称为键列(Key)。 键列不包含重复值,并且任何情况下都不会有缺失的值。维度键列连接事实表的维度,而维度键值对应事实表的颗粒度。 日期表是常见的维度表,它的日期列就是键列,这一列的每一行是一天,不含重复值。日期表的其他列则会存储描述业务实体属性的值,比如年、月、周等。借助维度表中的列,可以对事实表中的数据进行筛选和分组。
事实表是累积记录操作型事件所产生的可度量的值,比如销售订单、库存余额、每日温度等。事实表包含用于一个或多个与维度表关联的维度键列及数值列。 随着时间的推移,事实表的行将累积,通常包含大量的行。通过汇总事实表的数据生成度量值,体现业务实体的某种指标的程度,比如销售额、库存数量等。
星型架构就是在一个模型关系图中,以事实表是中心,以维度表做分支,建立各种维度表与事实表之间的关系,关系的方向是维度表筛选事实表,理想状态是多对一。
多个星型架构共用维度表,可以实现维度表对多个事实表的联动筛选。这样多个小的星型架构就构建成了一个大模型。需要注意的是任意两个表之间只能有一条活动的实线关系,两条或者关系传递形成了闭环都是不允许的,计算机就不知道使用哪条关系进行筛选了,所以星型架构建模中,要避免将事实表直接关联到其他事实表,虽然他们可能存在共同的维度列,这不是一种好的做法。
星型架构vs单表模型vs带雪花维度的星型架构
单表模型或带雪花维度的星型架构,也可用于建模,考虑到以下因素,不建议在PowerBI中使用。
单表模型,即一个表就是一个模型,将维度表和事实表组合成一个大宽表,它的优点是快捷,导入后不需要建立关系,直接可视化或者写度量值然后可视化,适合一次性分析;缺点是冗余数据多、不方便维护、维度列之间遵循Auto-Exist原则导致不能实现全量的维度列交叉等。
在星型架构的基础上,把维度表再次拆分为多个表,比如产品表、品牌表、品类表,形成几个多对一的关系,这种分支上再连接分支,称之为雪花维度。这样做每个表都比较规范,适合数据库存储,但是再PowerBI模型中,相比在一个维度表中,看起来不直观、加载的时候存储和性能的效率低、使用时筛选起来效率低、不能建立层次结构等。
举例
现实中的销售人员,在模型中体现为一个销售人员信息表,表里有销售人员的姓名、性别、区域等诸多属性信息。销售人员信息表是维度表,它基本稳定的,可能一个月才会有微量调整,它可以用来汇总销售数据,类似于在Excel透视表中的行或列字段。
现实中的销售信息,在模型中体现为一个销售订单信息表,这个表有销售日期、销售人员、产品、数量等交易相关信息。订单信息表是事实表,它的变化比较频繁,可能每天都会有很多新增的条目,它用来体现销售人员的订单多少的程度,类似于在Excel透视表中的值字段,可以进行求和、计数、平均等聚合运算。
现实中销售人员通过销售行为产生相应的销售订单,这种关系用这两个表共有的一个字段销售人员编码进行关联,销售人员信息表可以筛选和汇总销售订单信息表的数据。
操作步骤
STEP 1 在PowerBI桌面版的模型视图下,为每一个事实表建立一个页面,用来展示一个星型架构。如果模型较大,这样比在所有表页面中加载快也更清晰。
因为当事实表的个数很多的时候,在所有表页面中,模型就会看起来很乱,不利于梳理表与表之间的关系,像下面这样一个实例,所有表都在一个页面上展示,不容易快速读懂和梳理清楚这个模型。
STEP 2 把一个事实表和用于分析该事实表的维度表从数据窗格拖到页面中,事实表放在中间,维度表放在周边。
STEP 3 从维度表中拖动维度表与事实表的共有字段建立关系,注意关系两端的字段类型要一致,无论是多对一还是多对多,筛选的方向至少是维度表筛选事实表。
注意:为避免产生错误的自动关系,请点击菜单栏文件下的选项,在当前文件的数据加载中,将关系下的挑勾都去掉。
这样,再大的模型,也能够梳理得井井有条、清晰明了。
销售订单的星型架构:
销售目标的星型架构:
在画布中展示按销售人员信息表的姓名汇总的目标数量和订单数量:
拓展
本质上讲,PowerBI不区分维度表和事实表的,每个表的每个列都可以作为维度用于分析,也都可以作为事实用于聚合,因此有时候也不能完全受维度和事实的思维限制。