【数据分析过程解析】二、扩展和丰富数据模型

前面我们介绍了Excel中的Power BI组件,也介绍了实际工作中使用这些组件的一些案例。但还有些朋友对Power BI不太熟悉。从今天开始,我们将用一系列(3-4篇)文章完整介绍一个使用Power BI进行数据分析的全过程。

今天是第二篇:扩展和丰富数据模型

为了减少麻烦,本系列用的文件是微软提供的几个数据文件。

数据源文件获得方式:

关注本公众号,回复“Power BI数据分析案例文件”即可获得下载地址

正文

这是这个系列的第二篇。第一篇请看这里
上一节我们介绍了如何整合数据并创建数据模型。今天我们介绍如何扩展和丰富数据模型。

1. 使用关系图视图创建关系

上一节我们通过“创建关系”按钮为两个表创建了关系。今天我们介绍通过关系图视图来管理表之间的关系。

在Excel的“Power Pivot”选项卡中,点击“管理”:

进入“Power Pivot for  Excel”。点击“主页”选项卡中的“关系图”视图:

可以看到其中展现了模型中所有的表格,每个表格一个卡片,列出了表格的名字和字段。两个表格之间的连线代表这两个表格之间的关系。我们可以看到。表格Disciplines和Sports之间有关系,这是我们上一节创建的。Disciplines和Medals之间也有关系,这个关系是在Access源数据中就建立的,在上一节我们导入数据的时候,这个关系被一起导入到了数据模型中。

你的关系图视图可能不是这样的布局,你可以随时拖动表格的卡片,按照你的意愿安排布局。

如果你点击其中代表关系的连线,你会看到两个表上建立关系的字段被加上了方框,提示你是根据这两个字段建立的关系。

我们要注意到,除了这两组关系外,其余的4个表(S_Teams,W_Teams, Events, Hosts)没有与任何表创建关系。目前,这几个表是孤岛。需要在数据模型中增加关系,把它们互相连接起来。

我们仔细看这些表的字段,会发现在Medals表和Events表中有一个公共字段:Disciplines,我们可以考虑基于这个字段为这两个表创建关系。如果我们回去检查这些表的数据,会发现在Events表中,Disciplines字段的数据是不重复的,所以我们可以创建这个关系。

要在两个表的字段上创建关系,必须至少有一个表的该字段是唯一的,不重复的。也就是说,只有两种关系:1对1和1对多。如果两个表的该字段都是具有重复值的,这种关系称为多对多,必须引入中间表。

另外,为两个表建立关系的字段在两个表中的名字可以相同,也可以不同。不过相同的字段名字更加常见。

关于关系的更多详细要求,我们会在以后的文章中详细介绍。

点击Medals表的DisciplineEvent字段,鼠标拖拽到Events表的DisciplineEvent字段上:

松开鼠标后,我们发现Medals和Events之间已经创建了关系:

如果我们希望同样为Hosts表和其余某个表建立关系,从而使Hosts表能够与数据模型其他表建立关联,我们就需要找到Hosts表与其余表的管理字段。

但是,很遗憾,我们没有发现这样的字段。

有的时候我们就会面对这种情况。这时,我们可以为扩展数据模型,方法就是用到“计算列”。

2. 通过添加计算列来扩展数据模型

点击“主页”选项卡中的“数据视图”,切换到数据视图。

仔细研究Hosts表和其他表的数据,我们发现,实际上我们可以通过两个字段将Hosts表和Medals表关联在一起。一个是Edition,一个是Season。

现在,我们在两个表上分别创建计算列,然后用计算列创建关系。

在“Power Pivot for Excel”中,选中Hosts表,我们注意到,表格的最后一列右侧有一列,叫做“添加列”

在公式框中,输入公式:

=CONCATENATE([Edition],[Season])

回车后,该列就得到了结果数据:

将列名修改为“EditonID”。

这里要多说几句这个公式。

在Power Pivot中使用的公式跟Excel中类似。实际上有很多公式跟Excel中的公式名字一样,使用方式和返回结果一样,就像我们刚才用的CONCATENATE这个函数。而且使用更加方便。比如,随着你的输入,系统会出现提示:

此时,你可以输入Enter,系统自动将第一个备选函数输入完整。在Excel中目前还做不到这一点。

我觉得,从这点上看,微软已经不再把主要精力投入到Excel中了。他会将大量数据分析的功能和效率提升的功能集中在Power BI中。

这里用到的函数,叫做DAX函数。大家不要被这个“吓人”的名词DAX吓到。其实很简单,我们在前面的文章中已经见到一些了,比如DistinctCount等。我们会在后面的文章中详细介绍常用的DAX函数。

用同样的方法,为Medals创建计算列。但是要注意到,Medals表中的Edition和Hosts表中是不同的。在Hosts表中,Edition字段数据是年份,如1956。而Medals表中的Edition字段数据是日期,如:1956/1/1。因此,我们需要稍微变换一下公式:

=CONCATENATE(YEAR([Edition]),[Season])

添加完成计算列后,修改列名为“EditionID”:

你可能注意到了,我们是在数据模型的表中创建了计算列。这些列并没有添加到Excel工作表中的那些表格中。

现在,切换回“关系图视图”。

此时,你在Hosts和Medals表中找不到新创建的两个计算列。要想找到它们,可以按照如下方式操作:

点击“主页”选项卡下的“查找”按钮:

在出现的“查找元数据”对话框中输入“EditionID”:

点击“查找下一个”:

Medals中的EditionID字段已经找到。继续点击“查找下一个”,找到Hosts表的EditionID字段。

通过鼠标拖拽在Medals和Hosts之间建立关系。

3.添加层次结构

层次结构(英文叫Hierarchy)是一些字段的组合。大部分的数据模型中都包含各种层次结构的数据。例如省-城市-区/县-街道等地理位置数据,部门数据,产品分类数据,日期数据等。而数据模型中的层次结构就是对这种类型数据的反应。

我们的源数据是奥运会数据,同样也包含着层次数据。例如,每个Sport(运动项目)下,都包含许多不同的disciplines(分项)。每个disciplines下,有许多events(小项)。下图就是一个这样的层次数据的示例:

我们可以创建层次结构反应这种数据结果。

在“关系图视图”中,最大化Events表卡片:

(0)

相关推荐