powerpivot胖达君的超级工具技术文章

DAX:一文透彻理解DAX本质

2018-03-07  本文已影响1194人  PowerBI战友联盟

在没有很多教程的情况下,如果一个人的观察力足够强,他会自动串接很多线索,完成逻辑构建,进而实现快速学习的效果。
背后是 观察力,对 细节 的把握和敏感度能力。

在DAX有 迭代器 的说法,但任何文档都不明确写迭代器到底干嘛的
SUMX MAXX FILTER 的多次使用能让人猜到:
1、为什么会有迭代器
2、迭代器的内部逻辑是什么

进而 完全 透彻 彻底 掌握:
1、行上下文
2、EARLIER
3、EARLIEST
之类

DAX 的计算模型:函数

和Excel很多函数不同,必须理解DAX函数内部发生的复杂过程
DAX用函数封装了 循环 之类的逻辑,这些都需要 观察力 猜测 和 实践总结出来。

这个图非常好的显示了DAX的复杂性在哪里
例如:RANKX 就非常贴切的反应了这个图

为什么选择函数作为DAX的计算模型

为什么选择函数作为计算模型,为什么不是类似于Power Query M的形式或者SQL的形式呢。
一种说法是要继承Excel的函数风格,而从程序设计的角度,函数式是更加简单的。

可以看出函数式语言的结构是最简单的,但带来的直接问题就是要清楚在函数内部到底发生什么

DAX计算核心构造及思维主干


这两幅图展示了DAX所有原理性基础,用3种构造( 列 值 表 ) 和 1 种计算模式( 函数 )完成DAX所有功能。

DAX 默认计算思维主干:选表,连接,过滤,聚合。这条思路可以解决90%的问题,也可以用到DAX的超强性能。凡是不能充分符合这个主干的,都由DAX 公式引擎实现,但也会降低很大性能。

类似于SQL:
1、选表 from t1,t2
2、连接 where [图片上传失败...(image-f8eea6-1520408116046)]

t1.id = t2.ref_id
3、过滤 where x > a
4、分组 group by x
5、聚合 sum

把这个主干直接用DAX写出:
CALCULATE:
1、选表 FactSales ,DimCategory,DimCustomer(扩展表原理以及已有连接)
2、连接 USERELATION
3、过滤 FILTER( )
4、分组 SUMMARIZE( )
5、聚合 SUMX

得到结果。

所有的度量值,按照这种逻辑统一设计,就会用到DAX存储引擎;复杂逻辑超过这个范围,例如:IF( ),就在用公式引擎,他们之间有一个平衡。尽量用存储引擎就会快。
在报告中的每个 单元格 ,都独立执行了以上逻辑。

上一篇下一篇

猜你喜欢

热点阅读