发布网友 发布时间:2022-12-28 02:05
共1个回答
热心网友 时间:2023-10-07 13:04
在没有很多教程的情况下,如果一个人的观察力足够强,他会自动串接很多线索,完成逻辑构建,进而实现快速学习的效果。
背后是 观察力,对 细节 的把握和敏感度能力。
在DAX有 迭代器 的说法,但任何文档都不明确写迭代器到底干嘛的
SUMX MAXX FILTER 的多次使用能让人猜到:
1、为什么会有迭代器
2、迭代器的内部逻辑是什么
进而 完全 透彻 彻底 掌握:
1、行上下文
2、EARLIER
3、EARLIEST
之类
和Excel很多函数不同,必须理解DAX函数内部发生的复杂过程
DAX用函数封装了 循环 之类的逻辑,这些都需要 观察力 猜测 和 实践总结出来。
这个图非常好的显示了DAX的复杂性在哪里
例如:RANKX 就非常贴切的反应了这个图
为什么选择函数作为计算模型,为什么不是类似于Power Query M的形式或者SQL的形式呢。
一种说法是要继承Excel的函数风格,而从程序设计的角度,函数式是更加简单的。
可以看出函数式语言的结构是最简单的,但带来的直接问题就是要清楚在函数内部到底发生什么。
这两幅图展示了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( ),就在用公式引擎,他们之间有一个平衡。尽量用存储引擎就会快。
在报告中的每个 单元格 ,都独立执行了以上逻辑。