——PowerBI最难理解的地方是什么?
——白茶觉得是上下文。
日常生活中,学会使用DAX之后,我们已经习惯使用DAX函数来灵活的展示各种业务需要的KPI。
可是在构建函数的过程中,我们经常写着写着上下文就会被搞晕。
什么时候清除全部的上下文?什么时候清除部分上下文?扩展表在这里面有什么用?这些都是我们日常使用中需要注意的问题,一个细节疏忽了,就可能导致我们整体的思路崩塌掉。
- 理解什么是扩展表
扩展表理论,说的通俗一点,其实就是维度表与事实表的术语描述。
模型关系中,我们最常使用的模型关系就是“一对多”。(即One To Many)
站在Many这一端,所有的One都是衍生出来的扩展表。
也就是从事实表往回推,所有的维度表其实都是事实表的扩展表。
举个例子:
在上图的模型关系中,Model-Factsales、Model-Factstock、Model-Facttask这三张表作为事实表存在,那么其他所有对应的维度表都是这三张事实表的扩展表。
原生列与相关列:
原生列,即事实表与维度表之间的主键列。
相关列,事实表中原本不存在的列,可通过主键与事实表建立关系的列。
举个例子:
在上述模型关系中,销售明细作为事实表存在,产品表和日期表作为维度表存在。
’销售明细’[商品名称]——‘产品表’[商品名称]
’销售明细’[销售日期]——‘日期表’[Date]
上述的四列就是原生列。
’产品表’[销售价]或者’日期表’[年度月份]
这种事实表原来没有的,但是可以通过主键与事实表建立关系的,即为相关列。
- 扩展表与RELATED函数。
RELATED函数,通常可以作为返回模型关系中的相关列使用。
例如:
事实表中只有销售数量,我想计算该商品的总销售金额,即可使用RELATED函数返回维度表中相关的[单价]列。
传送门:
- 扩展表对于DAX还有什么影响呢?
ALL函数,是我们使用频率非常高的一个函数,我们经常需要使用ALL来清除整个表的上下文筛选或者某一列的筛选。
ALLEXCEPT函数,可以保留某一列筛选。
严格来说,ALL+VALUES与ALLEXCEPT的作用有些时候是差不多的,但是区别点在哪里?
举个例子:
ALLEXCEPT函数参数可以使用相关列。
如图所示,这里就使用了[商品名称]这一相关列。
那么还有哪些点也是需要我们注意的呢?
使用细则:
- 一般情况下,不要ALL整个事实表
- 能ALL具体的列,就不要ALL整个表
- 如果表格列稳定,多个ALL好过ALLEXCEPT
- 如果表格列经常变动,ALLEXCEPT是最佳选择
这里是白茶,一个PowerBI的初学者。