扩展表——ALL与ALLEXCEPT

2021-09-04 09:19:08 浏览数 (3)

——PowerBI最难理解的地方是什么?

——白茶觉得是上下文。

日常生活中,学会使用DAX之后,我们已经习惯使用DAX函数来灵活的展示各种业务需要的KPI。

可是在构建函数的过程中,我们经常写着写着上下文就会被搞晕。

什么时候清除全部的上下文?什么时候清除部分上下文?扩展表在这里面有什么用?这些都是我们日常使用中需要注意的问题,一个细节疏忽了,就可能导致我们整体的思路崩塌掉。

  • 理解什么是扩展表

扩展表理论,说的通俗一点,其实就是维度表与事实表的术语描述。

模型关系中,我们最常使用的模型关系就是“一对多”。(即One To Many)

站在Many这一端,所有的One都是衍生出来的扩展表。

也就是从事实表往回推,所有的维度表其实都是事实表的扩展表。

举个例子:

在上图的模型关系中,Model-Factsales、Model-Factstock、Model-Facttask这三张表作为事实表存在,那么其他所有对应的维度表都是这三张事实表的扩展表。

原生列与相关列:

原生列,即事实表与维度表之间的主键列。

相关列,事实表中原本不存在的列,可通过主键与事实表建立关系的列。

举个例子:

在上述模型关系中,销售明细作为事实表存在,产品表和日期表作为维度表存在。

'销售明细'商品名称——'产品表'商品名称

'销售明细'销售日期——'日期表'Date

上述的四列就是原生列。

'产品表'销售价或者'日期表'年度月份

这种事实表原来没有的,但是可以通过主键与事实表建立关系的,即为相关列。


  • 扩展表与RELATED函数。

RELATED函数,通常可以作为返回模型关系中的相关列使用。

例如:

事实表中只有销售数量,我想计算该商品的总销售金额,即可使用RELATED函数返回维度表中相关的单价列。

传送门:

函数周期表丨筛选丨值&表丨RELATED系列


  • 扩展表对于DAX还有什么影响呢?

ALL函数,是我们使用频率非常高的一个函数,我们经常需要使用ALL来清除整个表的上下文筛选或者某一列的筛选。

ALLEXCEPT函数,可以保留某一列筛选。

严格来说,ALL VALUES与ALLEXCEPT的作用有些时候是差不多的,但是区别点在哪里?

举个例子:

ALLEXCEPT函数参数可以使用相关列。

如图所示,这里就使用了商品名称这一相关列。

那么还有哪些点也是需要我们注意的呢?

使用细则:

  • 一般情况下,不要ALL整个事实表
  • 能ALL具体的列,就不要ALL整个表
  • 如果表格列稳定,多个ALL好过ALLEXCEPT
  • 如果表格列经常变动,ALLEXCEPT是最佳选择

传送门:

函数周期表丨筛选丨表丨ALL

函数周期表丨筛选丨表丨ALLEXCEPT

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球PowerBI丨需求圈)

这里是白茶,一个PowerBI的初学者。

0 人点赞