Power BI 学习手稿:0. 基础知识
本章讨论以下内容:
一、表格
二、数据类型
三、关系
四、筛选与跨表筛选
五、不同类型的模型(星型、雪花、桥接表)
六、度量与可加性(可加、非可加、半可加)
一、表格
表是保存信息的容器,分为行和列。每行包含关于单个实体的信息,而每行中的每个单元格包含数据库中表示的最小的信息片段。例如,客户表包含所有客户的信息。一行包含关于一个客户的所有信息,一列可能包含所有客户的名称或地址。一个单元格可能包含一个客户的地址。
在构建模型时,需要避免一些问题。例如,如图0.1,在同一个表的两行中存储关于一个订单的信息。在一行中,存储所订购的金额及其订购日期。在另一行中,存储已发货的金额,同样也包含其发货日期。这样做会将一个实体分割为同一个表的两行,从而不利于匹配。
应该这样做:如图0.2,建立两个分开的表,一个放置订单数据、另一个放置发货数据。
二、数据类型
设计模型时,每个列都有一个数据类型。数据类型是列中内容的类型。数据类型可以是整数、字符串、货币、浮点数等等。有许多数据类型可供选择。列的数据类型很重要,因为它会影响列的可用性、可以在列上使用的函数和格式化选项。
在包含装运数量的列中,整数是一个很好的数据类型。在需要存储销售额的列中,货币是正确的数据类型。使用纯Excel时,每个单元格可以包含任何数据类型的值。但是,在使用表格数据模型时,数据类型是在列级别定义的。这意味着表中的所有行需要在该列中存储相同的数据类型。不能为表中的一列使用混合数据类型。
三、关系
当模型包含多个实体时,通常情况下,将信息存储在多个表中,并通过关系将它们链接起来。在表列模型中,关系总是链接两个表,它基于单个列。如图0.3,关系最常见的表示形式是一个箭头,它从源表开始,指向目标表。
当定义一段关系时,总是有单向和多向。在示例模型中,对于每一种产品,都有许多销售,而对于每一种销售,都只有一种产品。因此,产品表在一边,而销售表在许多一边。箭头总是从多方向指向一侧。
在不同版本的Excel Power Pivot和Power BI中,用户界面使用不同的关系可视化。在Excel和Power BI的最新版本中,都会绘制一行,在行尾用 1 或 * 标记,以标识关系的一方或多方。在Power BI Desktop中,还可以选择创建一对一的关系。一对一的关系总是双向的,因为对于一个表的每一行,在另一个表中只能有0或1行。因此,在这个特殊的情况下,关系没有多向。
四、筛选与跨表筛选
当通过数据透视表或使用Power BI浏览模型时,筛选是非常重要的。事实上,它是报告中大多数计算的基础。使用DAX语言时,规则非常简单:筛选器总是从关系的一方移动到多方。如图0.4,在用户界面中,这由关系中间的一个箭头表示,该箭头显示筛选器如何通过关系传播。
当筛选Date的时候,也筛选了Sales。这就是为什么在数据透视表中,可以很容易地按年划分销售额:Date筛选器直接转化为Sales筛选器。相反的方向,在默认情况下是不起作用的。Sales的筛选器不会传播到Date。图0.5显示了默认情况下筛选器是如何传播的图形表示。
可以通过修改关系的设置来更改筛选器传播的方向,称为跨表筛选器。例如,在Power BI中,这是通过双击关系本身来实现的。如图0.6,打开“编辑关系”对话框:
缺省情况下,跨筛选方向为“单向”(一对多)。如果需要,可以将其更改为双向,以便筛选器也从多方向传播到一侧。图0.7显示了将筛选器设置为双向时,它是如何传播的:
如果需要在Power Pivot的Excel中激活双向过滤,你必须使用 CROSSFILTER 函数激活它,如下例所示,适用于图0.8所示的模型:
Num of Customers =
CALCULATE (
COUNTROWS ( Customer ) ,
CROSSFILTER ( Sales[CustomerKey], Customer[CustomerKey], BOTH )
CROSSFILTER 函数允许在计算语句的执行期间进行双向筛选。在对 COUNTROWS ( Customer ) 进行评估时,筛选器将从Sales移动到Customer,只显示Sales中引用的客户。例如,当需要计算购买产品的客户数量时,这种技术非常方便。事实上,筛选器自然地从产品转移到销售。然后需要使用双向筛选,让它通过销售流到客户。举例来说,有两种计算方法如图0.9所示。一个激活了双向筛选,另一个使用默认的筛选传播。
从结果上看,第一种衡量显然是不正确的。这两种衡量的定义如下:
CustomerCount := COUNTROWS ( Customer )