DAX表達(dá)式:Power Pivot的特有函數(shù)集
1. DAX表達(dá)式的結(jié)果應(yīng)用在數(shù)據(jù)透視表中?
2. DAX表達(dá)式的結(jié)果作用于整列或者表中所有行?
3. 還需注意以下幾點(diǎn):?
- a. 表名用“''”引用。?
- b. 字段名(列名)用“[]”引用。?
- c. 要注意函數(shù)表達(dá)式中參數(shù)的數(shù)據(jù)類型,尤其是要將“表”與“數(shù)值”正確區(qū)分。?
- d. 與Excel公式相同,除了直接在編輯器的公式區(qū)域輸入公式外還可以通過單擊公式編輯欄前 的“fx”圖標(biāo)啟動(dòng)“插入函數(shù)”對(duì)話框,在對(duì)話框中選擇需要的函數(shù)使用。?
- e. 表達(dá)式中的函數(shù)名不分大小寫,比如“ALL”函數(shù)也可以記作“all”。
相關(guān)參考網(wǎng)站:
https://msdn.microsoft.com/zh-cn/library/ee634365(v=sql.105).aspx https://msdn.microsoft.com/zh-cn/library/vs/alm/hh272053
dax表達(dá)式中,主要是進(jìn)行數(shù)據(jù)透視,既可以創(chuàng)建列值(例如:新建一列值=原列值*1000,但是這種盡量在PQ中完成),也可以創(chuàng)建度量值,還可以創(chuàng)建表。
函數(shù):
1、switch(表達(dá)式,值1,結(jié)果1,值2,結(jié)果2,....其他情況結(jié)果)
switch函數(shù)中不能出現(xiàn)邏輯符號(hào)判斷,只能是一個(gè)結(jié)果替換一個(gè)值
例如:將贏單率字段中0.15替換為"L"、0.25替換為"L"、0.5替換為"M"、0.75替換為"H"、其他替換為"-"
WinOdds = SWITCH([贏單率],0.15,"L",0.25,"L",0.5,"M",0.75,"H","-")
2、related(合并字段)
在表創(chuàng)建連接關(guān)系的情況下,用related直接寫字段名,就可以合并到其他表中需要合并的字段
例如:將商機(jī)相關(guān)企業(yè)信息表中的有無拖欠還款情況字段合并到本表中。
Risk = RELATED('商機(jī)相關(guān)企業(yè)信息'[有無拖欠還款情況])
3、filter(表,篩選條件)
第一個(gè)參數(shù)是篩選的表范圍,第二個(gè)參數(shù)是篩選的條件。
4、calculate(計(jì)算規(guī)則,條件 ,條件2...)
用來求條件下的任意規(guī)則的計(jì)算,條件可以有多個(gè)
例如:對(duì)商機(jī)記錄表中WinOdds="H",并且Risk="無"的數(shù)據(jù)進(jìn)行匯總
1高贏單率低風(fēng)險(xiǎn)金額合計(jì) = CALCULATE(SUM('商機(jī)記錄'[商機(jī)金額(M)]),FILTER('商機(jī)記錄','商機(jī)記錄'[WinOdds]="H"),FILTER('商機(jī)記錄','商機(jī)記錄'[Risk]="無"))
5、all,既能忽略篩選維度,也能忽略匯總維度。
- 計(jì)算總合計(jì)值,合計(jì)值不隨指定維度而合并同類項(xiàng),指定維度對(duì)度量失去篩選能力。
- all函數(shù)中放表名,那么表中的所有維度都失去篩選意義
- all下面有很多的衍生函數(shù),allselected就是其中的一個(gè)
例如:該度量值計(jì)算之后在城市維度下不進(jìn)行分類匯總。
所有城市對(duì)應(yīng)的商機(jī)金額的合計(jì)值 = CALCULATE(SUM('商機(jī)記錄'[商機(jī)金額(M)]),all('商機(jī)相關(guān)企業(yè)信息'[城市]))
6、allselected,用法同all,但是只忽略匯總維度,不忽略篩選維度
7、distinctcount,不重復(fù)計(jì)數(shù)
8、totalmtd()計(jì)算規(guī)則整理
參照的是時(shí)間點(diǎn),位移到當(dāng)前月的第一天, 返回的是當(dāng)前月第一天到今天的匯總值;如果切片器是時(shí)間段,是受后點(diǎn)影響
MtD = totalmtd(sum('調(diào)用的函數(shù)'[金額]),'調(diào)用的函數(shù)'[日期])
9、mPreviousMonth??計(jì)算規(guī)則整理
mPreviousMonth = calculate([金額合計(jì)],PREVIOUSMONTH('調(diào)用的函數(shù)'[日期]))
參照的是時(shí)間點(diǎn),位移到上個(gè)月的第一天,返回的是上個(gè)月一整個(gè)月的匯總值;如果切片器是時(shí)間段,是受前點(diǎn)影響
10、mDateAdd? ?計(jì)算規(guī)則整理
mDateAdd = calculate(sum('調(diào)用的函數(shù)'[金額]),dateadd('調(diào)用的函數(shù)'[日期],-1,MONTH))
參照的是時(shí)間點(diǎn),位移到到上一個(gè)月,返回上一個(gè)月指定天的值;如果切片器是時(shí)間段,可以參照時(shí)間段,返回的是前點(diǎn)和后點(diǎn)各往后移一個(gè)月的匯總值,如果時(shí)間段為:3.1-3.29,返回整個(gè)2月的值;如果時(shí)間段是2.1-2.28,則返回的是1.1-1.31的值;如果想獲得1.1-1.30的值,那么在dateadd中減去day,而不是month。
其他注意事項(xiàng):
1、不要認(rèn)為PP創(chuàng)建的默認(rèn)的連接規(guī)則是正確的的,一定要檢查。
2、公式中調(diào)出字段,在當(dāng)前表下打[],既可以調(diào)出該表下面的所有字段;如果是在其他表中,則打單引號(hào),可以調(diào)出所有表中的字段。
3、在沒有選擇表的情況下創(chuàng)建度量值時(shí),可能會(huì)創(chuàng)建到其他的表里,只要表正確連接,這個(gè)時(shí)候使用是不受影響的。修改度量字段屬于的表可以選中字段,度量工具>主表?中修改即可
4、度量工具位置可以修改度量值的格式
5、維度可以分為兩種,放在透視表中的匯總維度和放在切片器中的篩選維度
6、上下文的概念,上下文分為行上下文和篩選上下文。行上下文是對(duì)每一行進(jìn)行計(jì)算,行上下文的匯總方式是類型二,篩選上下文的匯總方式是類型一。不能把聚合函數(shù)放到另一個(gè)函數(shù)的內(nèi)部嵌套直接使用。calculate函數(shù)可以將篩選上下文直接轉(zhuǎn)換為行上下文,因此,sum可以用到calculate函數(shù)中。
9對(duì)金額排名 = rankx(all('商機(jī)相關(guān)企業(yè)信息'[城市]),[1金額合計(jì)])? //行上下計(jì)算,正確
9.對(duì)金額排名 = rankx(all('商機(jī)相關(guān)企業(yè)信息'[城市]),CALCULATE(SUM('商機(jī)記錄'[商機(jī)金額(M)]))) //將篩選上下文轉(zhuǎn)換為行上下文,正確
9錯(cuò)金額排名 = rankx(all('商機(jī)相關(guān)企業(yè)信息'[城市]),SUM('商機(jī)記錄'[商機(jī)金額(M)]))? //行上下文匯總,錯(cuò)誤
.png)
7、一個(gè)比較神奇的用法:
calculate中,條件直接跟,不使用函數(shù)可以得到下圖中的結(jié)果。
8上海商機(jī)金額合計(jì) = CALCULATE(SUM('商機(jī)記錄'[商機(jī)金額(M)]),'商機(jī)相關(guān)企業(yè)信息'[城市]="上海")
.png)
8、時(shí)間智能函數(shù): https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2014/ee634763(v=sql.120)。在使用時(shí)間智能函數(shù)的時(shí)候,需要先進(jìn)行充分的測(cè)試,包括參照的是點(diǎn)還是段、位移量、返回的是點(diǎn)還是段
9、PQ中生成的列表要轉(zhuǎn)化為表才能在PP中使用,PQ中的指定為任意類型的字段,在PP中會(huì)默認(rèn)為文本。








暫無數(shù)據(jù)