Power BI-DAX公式常用函數(shù)套路

一.篩選類(lèi)函數(shù)

1.ALL, ALLEXCEPT, ALLSELECTED
ALL(table/column)  --ALL用來(lái)清除整個(gè)表或某個(gè)字段的篩選條件,通常配合CALCULATE使用
ALLEXCEPT(table/column) --刪除表中除已應(yīng)用于指定列的篩選器之外的所有上下文篩選器
ALLSELECTED(table/column) --從當(dāng)前查詢(xún)的列和行中刪除上下文篩選器,同時(shí)保留所有其他上下文篩選器或顯式篩選器

2.CALCULATE(<expression>,<filter1>,<filter2>...)
--Calculate可以應(yīng)用在多個(gè)表
  Calculate使用AND關(guān)系時(shí)可直接在條件間加',',但表達(dá)“或”時(shí),必須用'||',而且連接的兩個(gè)條件
  必須引用同一列。
  Calculate中當(dāng)“[列] = 固定值”這種篩選搞不定時(shí),可用filter/all/values篩選器搭配使用

3.FILTER(table,<filter>)  --返回值:只包含篩選行數(shù)據(jù)的表
--篩選時(shí)對(duì)表進(jìn)行逐行掃描,計(jì)算量很大,所以選擇篩選的表盡量為lookup表

4.HASONEVALUE(<columnName>) --將 columnName 的上下文篩選為只剩下一個(gè)非重復(fù)值時(shí),
                              將返回 TRUE。 否則為 FALSE。

5.RELATED(<column>)  --將“一”端的列值添加到“多”端的表中
  RELATEDTABLE(<tableName>) --將“多”端關(guān)聯(lián)的表數(shù)據(jù)添加到“一”端的列上,
                              返回的是一張表

6.VALUES(<TableNameOrColumnName>)  --返回由一列構(gòu)成的一個(gè)表,該表包含來(lái)自指定表或列的
                                   非重復(fù)值。 換言之,重復(fù)值將被刪除,僅返回唯一值。

7.EARLIER函數(shù):
  例如我們有“產(chǎn)品名稱(chēng)”和“銷(xiāo)售金額”兩列數(shù)據(jù)。基于此,我們希望計(jì)算出每個(gè)產(chǎn)品的銷(xiāo)售金額排名。
  COUNTROWS(
            FILTER('產(chǎn)品銷(xiāo)售表',
                   EARLIER('產(chǎn)品銷(xiāo)售表'[銷(xiāo)售金額])<'產(chǎn)品銷(xiāo)售表'[銷(xiāo)售金額])
           )+1
  --EARLIER=當(dāng)前行,按照當(dāng)前行進(jìn)行逐行掃描,SUMX+FILTER+EARLIER 
    是Power Pivot中比較常用的函數(shù)組合,由于Earlier針對(duì)每一行數(shù)據(jù)都進(jìn)行計(jì)算,
    所以理論上計(jì)算量相當(dāng)于數(shù)據(jù)行數(shù)的平方。如果有10行數(shù)據(jù),則需要計(jì)算100次,
    所以數(shù)據(jù)量大的時(shí)候大家使用要小心,有可能會(huì)造成模型計(jì)算緩慢。

二.邏輯與邏輯判斷函數(shù)

1.IF(logical_test>,<value_if_true>, value_if_false)
  --檢查是否滿(mǎn)足作為第一個(gè)參數(shù)提供的條件。 如果該條件為 TRUE,則返回一個(gè)值;
    如果該條件為 FALSE,則返回另一個(gè)值,用法與excel類(lèi)似

2.SWITCH(<expression>,條件1,值1,條件2,值2)  --根據(jù)值列表計(jì)算表達(dá)式,
                                             并返回多個(gè)可能的結(jié)果表達(dá)式之一。
3.CONTAINS(InternetSales, [ProductKey], 214, [CustomerKey], 11185)
  --是否同時(shí)存在銷(xiāo)售給客戶(hù) 11185 的產(chǎn)品 214 的任何 Internet 銷(xiāo)售額。
4.ISBLANK(column) --判斷該列中某個(gè)值是否為空
5.ISNONTEXT(column)  --檢查某個(gè)值是否不是文本
6.ISNUMBER(column)  --檢查某個(gè)值是否為數(shù)字
7.ISTEXT(column)    --檢查某個(gè)值是否為文本
8.ISLOGICAL(column) --檢查某個(gè)值是否是邏輯值

三.時(shí)間日期類(lèi)函數(shù)

1.計(jì)算年初至今累計(jì)--TOTALYTD函數(shù)
  例如計(jì)算年初至今累計(jì)的銷(xiāo)售金額:
[年累計(jì)金額]:=
TOTALYTD([銷(xiāo)售金額],
         '日歷年'[日期])
# 如果要加上一個(gè)時(shí)間截止點(diǎn),則寫(xiě)為:
[年累計(jì)截止金額]:=
TOTALYTD([銷(xiāo)售金額],
         '日歷年'[日期],
         '日歷年'[日期]<DATE(2016,6,1))
# 同理計(jì)算季度初至今累計(jì)--TOTALQTD, 計(jì)算月初至今累計(jì)--TOTALMTD

2.計(jì)算上一年/季度/月的銷(xiāo)售額--DATEADD函數(shù)
[上一年銷(xiāo)售額]:=
CALCULATE([銷(xiāo)售金額],
          DATEADD('日歷年'[日期],-1,YEAR))  --YEAR可改為QUARTER,MONTH,DAY
                                           --將-1改為+1則時(shí)間后移

3.計(jì)算同比/環(huán)比
# 月同比--今年每月的銷(xiāo)售金額相比去年同月份增長(zhǎng)的比率
[上一年銷(xiāo)售額]:=
CALCULATE([銷(xiāo)售金額],
          DATEADD('日歷年'[日期],-1,YEAR))
[同比]:=
DIVIDE([銷(xiāo)售金額]-[上一年銷(xiāo)售額],
       [上一年銷(xiāo)售額])

# 月環(huán)比--這月與上月相比銷(xiāo)售額增長(zhǎng)的比率
[上一月銷(xiāo)售額]:=
CALCULATE([銷(xiāo)售金額],
          DATEADD('日歷年'[日期],-1,MONTH))
[環(huán)比]:=
DIVIDE([銷(xiāo)售金額]-[上一月銷(xiāo)售額],
       [上一月銷(xiāo)售額])

4. 計(jì)算兩個(gè)日期之間間隔--DATEDIFF
[時(shí)間間隔]:=
DATEDIFF([開(kāi)始日期],
         [結(jié)束日期],
         'Y')   --參數(shù)"Y"換成"M"或"D",則分別對(duì)應(yīng)月和日
                --也可以改成HOUR,MINUTE,SECOND計(jì)算小時(shí),分,秒

5.其他日期時(shí)間函數(shù):
DATE(2009,7,8)  --結(jié)果返回'2009/7/8 0:00:00'
DATEVALUE("8/1/2009")  --將文本形式的日期轉(zhuǎn)換為日期時(shí)間格式的日期,結(jié)果返回
                         '2009/8/1 0:00:00'
DATEADD([日期],3,DAY)  --日期加減函數(shù)
EOMONTH([日期],3)      --返回指定月份數(shù)之前或之后的月份的最后一天的日期
EDATE([日期],3)        --返回在開(kāi)始日期之前或之后指示的月數(shù)的日期   
YEAR(),MONTH(),DAY(),HOUR(),MINUTE(),SECOND()
NOW() --返回當(dāng)前的日期時(shí)間  TODAY()--返回當(dāng)前的日期          
WEEKDAY([日期],1)  --一周中的第幾天,參數(shù)1代表從星期日開(kāi)始計(jì)數(shù),參數(shù)2代表從星期一開(kāi)始計(jì)數(shù)
                     參數(shù)3代表從星期一開(kāi)始計(jì)數(shù),但到星期六結(jié)束
WEEKNUM([日期],1)  --一年中的第幾周,1代表從周日開(kāi)始計(jì)數(shù),2代表從周一開(kāi)始計(jì)數(shù)  

統(tǒng)計(jì)聚合函數(shù)

1. SUMX(table,<expression>)  --SUMX與CALCULATE功能類(lèi)似,但SUMX屬于迭代函數(shù),計(jì)算量大
                             --同理AVERAGEX,MINX.MAXX用法相同
2. SUM(),MAX(),MIN(),SQRT()
   DISTINCTCOUNT()--計(jì)算去重后列所包含的元素個(gè)數(shù)
   COUNTROWS()  --計(jì)算表的行數(shù)
   COUNT()  --計(jì)算列中包含數(shù)字的單元的數(shù)目
   COUNTA()  --計(jì)算列中不為空的單元的數(shù)目
   COUNTBLANK()  --計(jì)算列中空白單元的數(shù)目

3.DIVIDE(分子,分母)  --在DAX中涉及到除法必須用DIVIDE

4.CROSSJOIN(<table1>, <table2>)  --生成笛卡爾積表
  SUMMARIZE(<table>, <groupBy_columnName>,<name>,<expression>)
  --table,任何返回?cái)?shù)據(jù)表的 DAX 表達(dá)式。
    groupBy_columnName將使用該列中找到的值創(chuàng)建摘要組,此參數(shù)不能是表達(dá)式。
    name,給予總計(jì)或匯總列的名稱(chēng),包含在雙引號(hào)內(nèi)。
    expression,任何返回單個(gè)標(biāo)量值的 DAX 表達(dá)式,其中,表達(dá)式將計(jì)算多次(針對(duì)每行/上下文)。
  GENERATE(<table1>, <table2>)--生成笛卡爾積表

四.文本函數(shù)

1. LEFT(),RIGHT(),MID(),FIND(),SEARCH(),LEN() ---字符串提取函數(shù)

2. REPLACE(),SUBSTITUTE()  --字符串替換函數(shù)

3. TRIM(),LOWER(),UPPER()

4. FORMAT函數(shù),對(duì)于日期格式的自定義設(shè)置如下圖:


文章轉(zhuǎn)自https://zhuanlan.zhihu.com/p/35982521,來(lái)到簡(jiǎn)書(shū)只為學(xué)習(xí)記錄,侵刪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容