Power BI 学习手稿:0. 基础知识

Power BI 学习手稿:0. 基础知识

本章讨论以下内容:

一、表格
二、数据类型
三、关系
四、筛选与跨表筛选
五、不同类型的模型(星型、雪花、桥接表)
六、度量与可加性(可加、非可加、半可加)

一、表格

表是保存信息的容器,分为行和列。每行包含关于单个实体的信息,而每行中的每个单元格包含数据库中表示的最小的信息片段。例如,客户表包含所有客户的信息。一行包含关于一个客户的所有信息,一列可能包含所有客户的名称或地址。一个单元格可能包含一个客户的地址。

在构建模型时,需要避免一些问题。例如,如图0.1,在同一个表的两行中存储关于一个订单的信息。在一行中,存储所订购的金额及其订购日期。在另一行中,存储已发货的金额,同样也包含其发货日期。这样做会将一个实体分割为同一个表的两行,从而不利于匹配。

图0.1 将所有数据汇总到一个表中

应该这样做:如图0.2,建立两个分开的表,一个放置订单数据、另一个放置发货数据。

图0.2 分开两张表

二、数据类型

设计模型时,每个列都有一个数据类型。数据类型是列中内容的类型。数据类型可以是整数、字符串、货币、浮点数等等。有许多数据类型可供选择。列的数据类型很重要,因为它会影响列的可用性、可以在列上使用的函数和格式化选项。

在包含装运数量的列中,整数是一个很好的数据类型。在需要存储销售额的列中,货币是正确的数据类型。使用纯Excel时,每个单元格可以包含任何数据类型的值。但是,在使用表格数据模型时,数据类型是在列级别定义的。这意味着表中的所有行需要在该列中存储相同的数据类型。不能为表中的一列使用混合数据类型。

三、关系

当模型包含多个实体时,通常情况下,将信息存储在多个表中,并通过关系将它们链接起来。在表列模型中,关系总是链接两个表,它基于单个列。如图0.3,关系最常见的表示形式是一个箭头,它从源表开始,指向目标表。

表0.3 表之间的关系

当定义一段关系时,总是有单向和多向。在示例模型中,对于每一种产品,都有许多销售,而对于每一种销售,都只有一种产品。因此,产品表在一边,而销售表在许多一边。箭头总是从多方向指向一侧。

在不同版本的Excel Power Pivot和Power BI中,用户界面使用不同的关系可视化。在Excel和Power BI的最新版本中,都会绘制一行,在行尾用 1 * 标记,以标识关系的一方或多方。在Power BI Desktop中,还可以选择创建一对一的关系。一对一的关系总是双向的,因为对于一个表的每一行,在另一个表中只能有0或1行。因此,在这个特殊的情况下,关系没有多向。

四、筛选与跨表筛选

当通过数据透视表或使用Power BI浏览模型时,筛选是非常重要的。事实上,它是报告中大多数计算的基础。使用DAX语言时,规则非常简单:筛选器总是从关系的一方移动到多方。如图0.4,在用户界面中,这由关系中间的一个箭头表示,该箭头显示筛选器如何通过关系传播。

图0.4 关系线内的小箭头代表筛选的方向

当筛选Date的时候,也筛选了Sales。这就是为什么在数据透视表中,可以很容易地按年划分销售额:Date筛选器直接转化为Sales筛选器。相反的方向,在默认情况下是不起作用的。Sales的筛选器不会传播到Date。图0.5显示了默认情况下筛选器是如何传播的图形表示。

图0.5 大箭头表示在开启单向筛选时如何传播筛选器

可以通过修改关系的设置来更改筛选器传播的方向,称为跨表筛选器。例如,在Power BI中,这是通过双击关系本身来实现的。如图0.6,打开“编辑关系”对话框:

图0.6 “编辑关系”对话框允许修改跨表筛选器

缺省情况下,跨筛选方向为“单向”(一对多)。如果需要,可以将其更改为双向,以便筛选器也从多方向传播到一侧。图0.7显示了将筛选器设置为双向时,它是如何传播的:

图0.7 在双向模式下,筛选器双向传播。

如果需要在Power Pivot的Excel中激活双向过滤,你必须使用 CROSSFILTER 函数激活它,如下例所示,适用于图0.8所示的模型:

Num of Customers = 
CALCULATE (
    COUNTROWS ( Customer ) ,
    CROSSFILTER ( Sales[CustomerKey], Customer[CustomerKey], BOTH )
图0.8 这两个关系都被设置为默认模式,即单向模式。

CROSSFILTER 函数允许在计算语句的执行期间进行双向筛选。在对 COUNTROWS ( Customer ) 进行评估时,筛选器将从Sales移动到Customer,只显示Sales中引用的客户。例如,当需要计算购买产品的客户数量时,这种技术非常方便。事实上,筛选器自然地从产品转移到销售。然后需要使用双向筛选,让它通过销售流到客户。举例来说,有两种计算方法如图0.9所示。一个激活了双向筛选,另一个使用默认的筛选传播。

图0.9 这两种方法仅在跨表筛选器的方向上有所不同,结果完全不同

从结果上看,第一种衡量显然是不正确的。这两种衡量的定义如下:

CustomerCount := COUNTROWS ( Customer )