使用Power BI 和 Power Pivot时如何看待数据?

2023-08-27 12:10:58     来源:哔哩哔哩

很多EXCEL用户都要跨越的一个过程是:从整个表格的角度看待数据,而不是仅仅停留在单元格的层面,因为在Power BI 和 Power Pivot中不能对单元格的数据进行操作,要么对整行数据操作,要么对整列数据操作。

相关阅读:1、概念5: 维度表和事实表LOOKUP TABLES AND DATA TABLES-读书笔记(8) - 哔哩哔哩 ()


(资料图片)

2、概念4: Filter Propagation 筛选是如何传递的-读书笔记(7) - 哔哩哔哩 ()

3、概念3: 度量值 MEASURE-读书笔记(5) - 哔哩哔哩 ()

4、PowerQuery 预备知识和案例(1)超级表_哔哩哔哩_bilibili

一、EXCEL中的数据

EXCEL 中的数据操作方法比较简单。存在于EXCEL工作表中的数据,每个单元格包含一个元素,也可以叫一个标量值。你可以在每个独立的单元格中输入公式或值,单元格之间的值互不影响。

如果你想在工作表中把相同的公式重复使用,你可以复制公式到整页(整行或整列)。关键的点是:上图示例中每个单元格要么是一个标量值(值),要么是一个返回值的公式。这是EXCEL处理数据的方法。

听说过EXCEL中的超级表的概念吗?

现在,Excel引入了表格对象作为其工具套件的一部分(在数据区域按Ctrl+T键)。许多Excel用户不了解超级表这个东西,因此也没使用它。与传统的Excel的单元格相比,Excel超级表解决了许多问题,包括:

• 允许你把公式应用到表格中的整个列

• 在表格中添加新行时,公式会自动扩展

• 自动引用或者叫扩展引用(例如数据透视表的数据源表的引用),使其指向表格(可以更改大小和形状),而不是指向静态单元格范围。

下面我将同样的Excel数据范围转换为Excel超级表格(在数据区域按Ctrl+T键,或者点“插入”->"表格")。注意,现在我只需要添加一个公式即可创建“含税销售额”列。这公式操作的是整个表格。

使用EXCEL超级表,你可以在工作表公式中引用整个表格了。看下面的图示,演示如何在G3单元格中用公式中引用超级表的某一列。当表格增加行时,新行的对应列中自动填充公式,是不是很方便呢。

EXCEL超级表的用法跟Power Pivot and Power BI中对数据的操作方法很像。你不用再想着把一组单元格数据做为操作对象,而是要整表或整列处理数据。

二、如何看Power Pivot & Power BI数据表中的数据

度量值操作整个模型的数据。用于同一个度量值的公式,当模型或报表的筛选不同时,不管是列筛选、表格筛选和可视化对象的筛选,度量值的结果是不同的。

表中不能直接引用行。想引用表格特定的行,只有一个办法,那就是用筛选的办法拿到想要的行(筛选后的表行是一个虚拟的表)。度量值和计算列就是使用这些筛选后的表行(虚拟表)。

要试着学会在脑海中“想像出"一个筛选后的表的样子。这是一个使用好DAX公式的小技巧,因为在DAX公式中这些筛选后的表是"虚拟的,不可见的",并不是实际存在的表。在PBI中,我们可以使用表函数配合筛选函数把这些虚拟表给造出来,看看筛选出来的表是什么样子(这样做是为了测试,我们并不会把这些测试表放到实际模型里)。

一旦你掌握了这个“想像”的技巧,你只有在无法弄清楚为什么你的公式失效时或者遇到特定问题无法解决时才需要把这些"虚拟的"表格实体化出来。

我们做个锻炼想像力的小练习

假设我们有一个日期表,日期从2010年1月1号到2016年12月31号,有这些列:[Day Name], [Month Name] and [Year],就像下面这个样子。

这个日期表有超级2500行,在脑海中复原一下表的样子。现在我们开始筛选,请筛选出[Year]字段等于2012,并且 [Month Name]等于Feb的行

筛选应用后的问题如下:

筛选后的表格长什么样儿?

应用这两个筛选后,表格中有多少可见行?

三、如何看Power Pivot数据表中的列数据

如上节所述,我们不光要了解表格数据,还要理解列数据。这里有几个问题帮助大家"臆想出"表格,这些问题是关于列数据的。

上节最后筛选后的表中,Month Name列中有多少个唯一值?

上节最后筛选后的表中,Day Name列中有多少个唯一值?

 上节最后筛选后的表中,Date column列中日期的最小值是什么?

 上节最后筛选后的表中,Date column列中日期的最大值是什么?

 上节最后筛选后的表中, date列中Day Name最后一个日期是什么?

这几个问题的答案会在最后给到大家。大家试着尽量别看答案回答,这将有助于提升理解表数据和列数据的技巧,小提示:

大多数公式操作的是单列或多列数据。

使用的是列式数据库,并且它已经被优化用于处理列数据。

一般来说,逐列应用筛选比同时对多列应用筛选效率更高,看看下面这两个度量值:

Count of days inefficient

CALCULATE(

COUNTROWS('Calendar'),

FILTER('Calendar','Calendar'[Year] = 2012 && 'Calendar'[Month Name] = “Feb”)

)

Count of days efficient

CALCULATE(

COUNTROWS('Calendar'),

FILTER('Calendar','Calendar'[Year] = 2012),

FILTER('Calendar','Calendar'[Month Name] = “Feb”)

)

第二个公式更加高效,因为有两个单独的筛选应用于两个不同的列,并且它们一次应用一个(这两个筛选在逻辑上是“与”的关系)这比要求Power Pivot同时筛选两个列要高效得多。注意,上述这两个度量中的FILTER函数都返回一个经过筛选的日期表的副本。筛选后的日期表的筛选副本并不可见,但是如果你能想象出日期表在筛选状态下的样子,恭喜你已经走在了正确的路上。

四、数据模型

需要学习的最后一件事是整个数据模型是作为一个封闭的系统运行的。下面的数据模型中,上面一行是4个维度表(Lookup tables/Demenssion tables),下面2个是事实表(Fact tables)。

这6张表在模型中操作时是一个整体,谁也离不开谁。筛选数据时,筛选的过程指向总是从维度表向事实表传递(本模型图中从上向下筛选,就是从一端表向多端表传递)。筛选不会自己从事实表向维度表传递(本模型图中从下向上筛选)。所以我们不但要学会思考筛选会如何影响单个表,还需要进一步想象这些筛选将如何传播到数据模型中的所有其他表格。

第一部分问题答案:

1、筛选后的表格有4列,29行。

2、29行

第二部分问题答案:

1、 1 – Feb.

2、7个值,from Sun to Sat

3、 1 Feb 2012

4、29 Feb 2012

5、It is Wednesday。这个答案需要建一个测试表找出。

标签:

包装