欢迎光临散文网 会员登陆 & 注册

数据加工与数据建模-PowerQuery Vs Power BI

2023-08-28 21:00 作者:京西漫步  | 我要投稿

本文旨在帮助大家理解在Power Query中加工数据与在 Power BI中建模的区别和内在联系,在Power BI中生成可视化报告时,这两者都会用到。

相关阅读:

  1. 概念1: 数据建模(Data Modelling)-读书笔记(3) - 哔哩哔哩 (bilibili.com)

  2. DAX 专题2: 计算列 Calculated Columns-读书笔记(9) - 哔哩哔哩 (bilibili.com)

  3. Power Query基础篇-1 概述:数据分析中ETL概念的含义,M语言的三层组件及PQ的版本区别。_哔哩哔哩_bilibili

在自助BI项目中,我们习惯把项目的过程分成四个阶段,获取和加工数据,数据建模,可视化报告,数据共享,如下图

BI项目阶段划分

上面的图片从逻辑上展示了数据从源开始到最后生成可视化报告的转化过程(从左到右)。在问题解决之前,你可能会不断的反复这个过程,直到得到满意的结果。今天我们只讲上面四个步骤中的两个:数据的加工和数据建模。

数据的获取清洗在Power Query中完成,建模是Power BI要完成的事儿,数据清洗和建模是生成可视化报告时都要用到的。

一、数据加工

数据加工是从数据源获取数据,转换数据然后加载到 Power BI的过程,这个过程就是我们常听到的数据处理ETL的概念(ETL是Extract,Ttransform and Load的缩写 )。数据加工通过包括以下步骤:

  1. 重构从数据源获取到的数据表,以达到做可视化报告的数据源要求。通常我们从源拿到的数据,从结构上或数据的维度上都不能满足Power BI的使用需要,所以我们要避免直接从源拿到数据后就加载到Power BI。

  2. 只保留需要的数据行或表的列,只加载需要的数据,用不到的一点也不保留。即使后续有需要(某些数据行或表的列),也很容易根据变更的需求把数据加载上来。

  3. 把确认需要的数据提前在数据表中进行聚合运算好,尽管我们通常不强烈建议这样做,但总有例外不是。

  4. 把所有要用到的数据表加载到Power BI数据模型。(有时也不是必须全部加载,例如数据清洗过程的中间查询就没必要加载)

    如果可能的话,这些加工的活儿在关系型数据库里完成最好,否则,我们就要在Power Query中完成这些。

二、数据建模

数据建模的过程就是设计数据表结构、建立 表间关系和编写度量值的过程,这些工作的目的就是抽象出可视化报告中的业务见解。建模一般包括下面几个步骤:

  1. 决定要加载哪些数据表(或者不加载哪些数据表)。

  2. 确定数据模型的模式,模型中有一张、两张还是多张表,还是建议大家采用星形结构的数据模型。

  3. 确定好表名和表的列名。

  4. 确定好是采用大宽表,还是窄表(列很多的表,还是列较少的表)

  5. 表间关系连接(在各种表之间按规则进行连线)

  6. 依据加载到模型的数据,根据业务逻辑和表关系编写好度量值,以供可视化报告使用以形成业务见解。

  7. 设置好度量值格式,以满足报告需要。(像货币、百分比、小数等格式)

  8. 给度量值命名时也要遵守便于识读理解、记忆、符合业务需要的原则,使用者一看度量值 名字就知道要计算出啥。

综上所述,要加载哪些数据是建模的工作,重构数据是数据加工的活儿,数据加工与数据建模还存在很多内在联系,二者也不能一刀切地分开。

三、数据加工与数据建模的关联性

        比较容易弄蒙Power BI初学者的一件事儿是:至少有两种方法能完成添加列的工作,你可以在Power Query添加列,也可以在Power BI中用DAX添加计算列。当然还有另一种方法,就是在数据源的源文件(数据库表或者其它形式的数据源文件)中添加列。不管采用哪种方法完成添加列,是否添加列以及添加列的内容,都应该根据数据模型来确定。这是一个有争议的问题,关于实际添加计算列的过程算是数据加工还是数据建模?本文认为它是一个数据加工的过程,最好在Power Query中完成。

       所以说,究竟用哪种方法添加列呢?这取决于你想做什么?我给大家的建议是在离数据源文件尽可能近的端完成添加列。

  1.  在数据源文件中添加列,比例在数据仓库中就把想添加的列加上,当然这可能需要IT小组的人协助完成。

  2. 在Power Query中完成添加列。

  3. 在Power BI中通过DAX添加计算列。

 如此排列上述三个步骤的先后顺序是有原因的:

 💠 如果在数据源文件中添加列,那么这些数据源文件不仅能满足当前BI项目的需求,也能满足未来的需要,更方便其它BI用户使用。在源头添加列提供了最大的数据复用性,如果以后需要进行更改,维护的工作量很少。然而,现实的情况往往是由于各种原因,你无法给源文件添加列或做变动,或者至少无法迅速实现,因此,对于自助式BI用户来说,这种方法通常不好实现。

  💠 如果在Power Query中添加列(或在源文件中添加列),则在数据加载过程中,添加的列将与其他所有列一起加载和压缩。这意味着更高的整体表压缩率,会让模型文件更小,整体运行效果也更好,它还将所有的数据加工任务集中在一起,这使得数据查找更加直观,模型也更容易维护。

通常只有在其他两种方法不好实现时我们才在PBI中使用添加计算列。选择添加一个计算列(使用DAX方法)的最常见原因是需要利用现有模型的内容来创建新数据。

以Adventure Works数据模型为例,假设你想将客户分为高销售量、中销售量和低销售量三个等级,就需要在客户表中添加一个新的列(这是一个建模决策),以便在报表中使用该列(包含三个等级的列)作为一个切片器。如果你想在Power Query中完成这个任务,那将会产生额外的工作量。你得在Power Query计算出每个客户的销量,那还需要做下面4件事儿:

1.把销售表和客户表做横向连接。

2. 把每位客户的销售做聚合运算。

3.用衡量高销售量、中销售量和低销售量三个等级的数值按客户销量将客户分为三类。

4. 添加等级新列。

🔶   重点来了,上述第1和第2步可能在数据模型中已经有了,Adventure Works示例模型中已经有了一个客户表,与销售表的关系以及一个用于计算销售量的度量值。利用模型使用DAX很容易添加新的计算列。简而言之,当计算列利用了模型的逻辑(度量值和表关系),使得不必在Power Query中重复这个逻辑时,应该优先选择计算列。

结论:

在PBI中能添加计算列,但也不是必须的,不要忘了度量值 可以代替计算列,不到不得已的时候不给模型添加新列。


数据加工与数据建模-PowerQuery Vs Power BI的评论 (共 条)

分享到微博请遵守国家法律