在沒(méi)有很多教程的情況下拆吆,如果一個(gè)人的觀察力足夠強(qiáng)肛鹏,他會(huì)自動(dòng)串接很多線(xiàn)索逸邦,完成邏輯構(gòu)建,進(jìn)而實(shí)現(xiàn)快速學(xué)習(xí)的效果在扰。
背后是 觀察力缕减,對(duì) 細(xì)節(jié) 的把握和敏感度能力。
在DAX有 迭代器 的說(shuō)法芒珠,但任何文檔都不明確寫(xiě)迭代器到底干嘛的
SUMX MAXX FILTER 的多次使用能讓人猜到:
1桥狡、為什么會(huì)有迭代器
2、迭代器的內(nèi)部邏輯是什么
進(jìn)而 完全 透徹 徹底 掌握:
1、行上下文
2裹芝、EARLIER
3部逮、EARLIEST
之類(lèi)
DAX 的計(jì)算模型:函數(shù)
和Excel很多函數(shù)不同,必須理解DAX函數(shù)內(nèi)部發(fā)生的復(fù)雜過(guò)程
DAX用函數(shù)封裝了 循環(huán) 之類(lèi)的邏輯局雄,這些都需要 觀察力 猜測(cè) 和 實(shí)踐總結(jié)出來(lái)甥啄。
這個(gè)圖非常好的顯示了DAX的復(fù)雜性在哪里
例如:RANKX 就非常貼切的反應(yīng)了這個(gè)圖
為什么選擇函數(shù)作為DAX的計(jì)算模型
為什么選擇函數(shù)作為計(jì)算模型,為什么不是類(lèi)似于Power Query M的形式或者SQL的形式呢炬搭。
一種說(shuō)法是要繼承Excel的函數(shù)風(fēng)格蜈漓,而從程序設(shè)計(jì)的角度,函數(shù)式是更加簡(jiǎn)單的宫盔。
可以看出函數(shù)式語(yǔ)言的結(jié)構(gòu)是最簡(jiǎn)單的融虽,但帶來(lái)的直接問(wèn)題就是要清楚在函數(shù)內(nèi)部到底發(fā)生什么。
DAX計(jì)算核心構(gòu)造及思維主干
這兩幅圖展示了DAX所有原理性基礎(chǔ)灼芭,用3種構(gòu)造( 列 值 表 ) 和 1 種計(jì)算模式( 函數(shù) )完成DAX所有功能有额。
DAX 默認(rèn)計(jì)算思維主干:選表,連接彼绷,過(guò)濾巍佑,聚合。這條思路可以解決90%的問(wèn)題寄悯,也可以用到DAX的超強(qiáng)性能萤衰。凡是不能充分符合這個(gè)主干的,都由DAX 公式引擎實(shí)現(xiàn)猜旬,但也會(huì)降低很大性能脆栋。
類(lèi)似于SQL:
1、選表 from t1,t2
2洒擦、連接 where [圖片上傳失敗...(image-f8eea6-1520408116046)]
t1.id = t2.ref_id
3椿争、過(guò)濾 where x > a
4、分組 group by x
5熟嫩、聚合 sum
把這個(gè)主干直接用DAX寫(xiě)出:
CALCULATE:
1秦踪、選表 FactSales ,DimCategory邦危,DimCustomer(擴(kuò)展表原理以及已有連接)
2洋侨、連接 USERELATION
3、過(guò)濾 FILTER( )
4倦蚪、分組 SUMMARIZE( )
5希坚、聚合 SUMX
得到結(jié)果。
所有的度量值陵且,按照這種邏輯統(tǒng)一設(shè)計(jì)裁僧,就會(huì)用到DAX存儲(chǔ)引擎个束;復(fù)雜邏輯超過(guò)這個(gè)范圍,例如:IF( )聊疲,就在用公式引擎茬底,他們之間有一個(gè)平衡。盡量用存儲(chǔ)引擎就會(huì)快获洲。
在報(bào)告中的每個(gè) 單元格 阱表,都獨(dú)立執(zhí)行了以上邏輯。