智能管理会计:从Excel到Power BI的业务与财务分析(全彩)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 Power BI数据分析的基本概念

微软Power BI很容易上手。通过自查软件的帮助,在学习几个简单的示例之后,读者用鼠标进行简单的拖曳可能就能快速生成效果绚丽的交互式报表。但是,要想创建相对科学、高效的分析模型,实现相对复杂业务逻辑的报表,则需要对商业智能数据分析的相关概念有一定的理解和认识。

1.3.1 维度与度量值

维度与度量值是Power BI中的核心概念,也是Power BI能够从容应对各种分析需求的秘密。维度就是不同值的描述属性或特征,是观察数据的角度,如对于公司销售数据,可以分析不同省份的销售数据,也可以分析不同月份的销售数据等,这里的“省份”和“月份”就是维度。度量值就是分析对象的统计值,如销售数据中的销售收入、销售数量等。

维度与度量值如表1-1所示。

表1-1 维度与度量值

对于Excel用户来说,维度与度量值是一个全新的概念,其可能一直没有意识到它们的存在,但事实上,所有的数据分析都离不开维度与度量值。例如,2020年4月公司所有产品的销售收入是多少?今年各月哪种产品的销售收入最多?每月销售收入大于平均销售收入的产品有哪些?等等。如果用Excel来回答这类问题,就需要逐一计算每月的每类产品的销售收入是多少,如果新增了“地区”这个维度,在Excel中似乎又是一个全新的指标,又要重新计算各地区的销售收入是多少。但在商业智能软件中,这些问题都只涉及一个度量值,即销售收入。只要通过切换不同的分析维度,销售收入就能自动匹配相应观察维度下的值,而不用重新编写计算公式。因此,商业智能软件将所有分析抽象为维度与度量值,大大提高了分析效率。

1.3.2 维度表与事实表

维度表就是专门用来描述事物属性或特征的表。如表1-2所示,城市信息表就是一张维度表,记录了每个城市的名称、所属省份、区域、分类等信息。维度表是基础表,相对稳定,一般不会随时间变化。事实表就是用来记录各维度值的表。如表1-3所示,销售数据表就是一张事实表。随着时间的推移,事实表的行数会不断增加。例如,随着交易记录的不断产生,销售数据表会不断变大。

表1-2 维度表(城市信息表)

表1-3 事实表(销售数据表)

事实表一般较大,维度表一般较小,一个维度表可以关联多个事实表,维度表的存在能减少事实表的数据冗余,避免相同的信息重复出现(如表1-3所示,“城市ID”列中的“5”出现了多次,与维度表关联之后,表1-3不用重复记录该城市所属省份等信息)。

1.3.3 一维表与二维表

对于经常使用Excel的用户来说,可能不用关注一维表与二维表的问题,因为不管是一维表还是二维表,使用Excel公式总能求解(当然效率上可能存在差异),但是,使用Power BI必须注意这个问题,因为这会对后期模型的建立产生严重的影响。

一维表是指每列属性相互独立的表,可以认为一维表只有列标题,而没有行标题,如表1-4所示。二维表是指某些列属性相同的表,可以认为二维表是既有列标题又有行标题的表,如表1-5所示。

表1-4 一维表(各城市收入表)

表1-5 二维表(各城市收入表)

一维表与二维表可以相互转换,二维表转换成一维表的操作叫逆透视,一维表转换成二维表的操作叫透视。在Excel中,将表1-4(一维表)转换成表1-5(二维表)最快的方法是使用数据库透视表,但是,Excel中并没有直接提供将二维表转换成一维表的工具和命令。如果使用Power BI中的Power Query编辑器就可以轻松地将二维表转换成一维表,或者将一维表转换成二维表。

一般信息系统中生成或存储的数据表基本上是一维表,这是因为一维表便于计算机读取和运算,缺点是人眼识别困难。而二维表一般用于人工填写和读取,这是因为二维表固定了行标题和列标题,只需要填写变动的数据,减了数据的重复录入,并且易于人眼识别,便于对比分析,缺点就是计算机处理比较麻烦。因此,在使用Power BI分析数据时,如果源数据是手动录入的Excel表,就可能是二维表,一般需要使用Power Query编辑器将二维表转换成一维表。

提示:这里的一维与二维是指逻辑上的维度,不是指空间中的一维与二维,数据表在空间中都是二维的。

1.3.4 表与表之间的关系

经常使用Excel函数的用户对于VLOOKUP函数可能十分熟悉,VLOOKUP作为高频查找引用函数之一,常常被用于将多张表依据某列合并为一张表。它在数据量比较小的时候十分好用,但在数据比较多的时候运算缓慢,并且编写公式也相当麻烦。但是使用Power BI可以抛弃VLOOKUP函数,在Power BI中分析数据一般不需要像在Excel中那样把多张表合并为一张表,而是通过建立表与表之间的关系将多张表联系在一起的。

表与表之间的关系有3种,分别为一对一关系、一对多关系和多对多关系。一对一关系很容易理解,如一个人对应一个身份证ID;一对多关系是最常用的,如表1-3所示的城市ID与订单ID就是一对多关系,一般而言,维度表与事实表之间通常通过某列建立一对多关系,表1-2(维度表)可以通过“城市ID”列与表1-3(事实表)建立一对多关系;多对多关系相对复杂,如表1-3所示,城市ID与产品ID就是多对多关系,即在一个城市中销售多种产品,同时一种产品又在多个城市销售。

1.3.5 计值上下文

计值上下文在Power BI中无处不在,它是理解DAX语言的关键所在,只有掌握了上下文的概念,才能明白度量值的千变万化。计值上下文就是DAX表达式所处的计算环境,同样的表达式所处的计算环境不同,计算结果也会不同,因此要达到预期的计算结果,很多时候改变上下文即可,而不用像Excel一样重新编写计算公式,这大大提高了建模分析效率。

计值上下文分为筛选上下文和行上下文。筛选上下文分布广泛,不仅存在于筛选器、视觉对象之间和视觉对象内部,还存在于可设置筛选条件的DAX函数中。

图1-4展示了存在于筛选器、视觉对象之间和视觉对象内部的筛选上下文,矩阵中的销售收入数据均由一个度量值[销售收入]生成,其中“”标识处的筛选上下文共5处,分别存在于视觉对象“日期”及“省”切片器中的①和②处,“筛选器”窗口中的③处,以及矩阵视觉对象内部自身的行列构成的④和⑤处,表示的含义是公司南区广东省在2017年12月23日至2019年2月8日线上自营的T恤衫销售收入为5100万元。

图1-4 存在于筛选器、视觉对象之间和视觉对象内部的筛选上下文

DAX表达式CALCULATE(SUM('销售表'[销售价格]),'客户表'[性别]="女"),通过函数CALCULATE设置了SUM('销售表'[销售价格])的筛选上下文,即'客户表'[性别]="女",因此该DAX表示式的含义是,在当前上下文下女顾客产生的销售收入。

与筛选上下文相比,行上下文存在的范围比较小,只存在于数据视图数据表的列中(见图1-5),以及FILTER、SUMX、MAXX、MINX等迭代器函数中。如SUMX('销售表','销售表'[销售价格]*'销售表'[销售数量]),SUMX函数首先通过'销售表'中的行上下文计算每行[销售价格]与[销售数量]相乘后的销售收入,然后将所有行的销售收入求和。

图1-5 存在于数据视图中的行上下文

筛选上下文的作用是筛选,行上下文的作用是迭代,二者各司其职。但是,行上下文在一定条件下(引用度量值或使用外套CALCULATE函数)可以转换为筛选上下文,如在数据视图下,使用“新建列”命令分别创建两列(见图1-6和图1-7):

收入合计1=SUM('销售表'[销售收入])

收入合计2=CALCULATESUM('销售表'[销售收入]))

图1-6 行上下文不参与筛选

图1-7 行上下文转换为筛选上下文

新建的“收入合计1”与“收入合计2”这两列的结果并不相同,这是因为“收入合计1”列不存在筛选上下文,而行上下文并不参与筛选,所以计算结果就是所有行的销售收入金额合计,而“收入合计2”列外套CALCULATE函数,使当前行的行上下文转换成筛选上下文,结果导致“收入合计2”列的每行的计算结果就是当前行的销售收入金额。