- Excel DAX 教程
- DAX - 首頁
- DAX - 概述
- DAX - 計算列
- DAX - 計算欄位/度量值
- DAX - 編輯計算欄位
- DAX - 刪除計算欄位
- DAX - 語法
- DAX - 運算子
- DAX - 標準引數
- DAX - 函式
- DAX - 理解DAX函式
- DAX - 計算上下文
- DAX - 公式
- 更新DAX公式的結果
- 更新資料模型中的資料
- DAX - 重新計算DAX公式
- DAX公式重新計算故障排除
- DAX - 公式錯誤
- DAX - 時間智慧
- DAX - 篩選器函式
- DAX - 場景
- 執行復雜計算
- DAX - 使用文字和日期
- 條件值和錯誤測試
- DAX - 使用時間智慧
- DAX - 排名和比較值
- Excel DAX 有用資源
- DAX - 快速指南
- DAX - 有用資源
- DAX - 討論
Excel DAX - 函式
大多數DAX函式的名稱和功能與Excel函式相同。但是,DAX函式已被修改為使用DAX資料型別並與表和列一起工作。
DAX有一些在Excel中找不到的附加函式。這些DAX函式用於特定目的,例如基於與資料模型的關係資料庫方面相關的關係進行查詢,能夠迭代表以執行遞迴計算,執行動態聚合以及用於利用時間智慧的計算。
在本章中,您將學習DAX語言支援的函式。有關這些DAX函式用法的更多資訊,請參閱本教程庫中的教程 - DAX函式。
什麼是DAX函式?
DAX函式是DAX語言中提供的內建函式,使您能夠對資料模型中表中的資料執行各種操作。如前所述,DAX用於資料分析和商業智慧目的,需要支援從資料中提取、整合和得出見解。基於資料模型的DAX函式為您提供了這些實用程式,一旦您掌握了DAX語言和DAX函式的用法,您的工作就會變得更簡單。
Excel函式與DAX函式
您瞭解的Excel函式和DAX函式之間存在某些相似之處。但是,也存在某些差異。您需要弄清楚這些差異,以便避免在使用DAX函式和編寫包含DAX函式的DAX公式時出錯。
Excel函式和DAX函式的相似之處
許多DAX函式具有相同的名稱和相同的常規行為,就像Excel函式一樣。
DAX具有與Excel中的陣列和向量查詢函式類似的查詢函式。
Excel函式和DAX函式的差異
DAX函式已被修改為採用不同型別的輸入,並且某些DAX函式可能會返回不同的資料型別。因此,即使它們具有相同的名稱,您也需要分別瞭解這些函式的用法。在本教程中,您會發現每個DAX函式都以DAX為字首,以避免與Excel函式混淆。
您不能在Excel公式中使用DAX函式,也不能在DAX中使用Excel公式/函式,除非進行必要的修改。
Excel函式採用單元格引用或單元格範圍作為引用。DAX函式從不採用單元格引用或單元格範圍作為引用,而是採用列或表作為引用。
Excel日期和時間函式返回一個整數,該整數將日期表示為序列號。DAX日期和時間函式返回DAX中的datetime資料型別,但在Excel中沒有。
Excel沒有返回表的函式,但某些函式可以使用陣列。許多DAX函式可以輕鬆引用完整的表和列來執行計算並返回表或值列。DAX的這種能力增強了Power Pivot、Power View和Power BI的功能,DAX在其中得到使用。
DAX查詢函式要求在表之間建立關係。
Excel支援資料列中的變體資料型別,即您可以在一列中具有不同資料型別的資料。而DAX期望表的一列中的資料始終具有相同的資料型別。如果資料的資料型別不同,DAX會將整列更改為最適合列中所有值的的資料型別。但是,如果資料已匯入並且出現此問題,DAX可能會標記錯誤。
要了解DAX資料型別和資料型別轉換,請參閱章節 - DAX語法參考。
DAX函式的型別
DAX支援以下型別的函式。
- DAX表值函式
- DAX篩選器函式
- DAX聚合函式
- DAX時間智慧函式
- DAX日期和時間函式
- DAX資訊函式
- DAX邏輯函式
- DAX數學和三角函式
- DAX其他函式
- DAX父子函式
- DAX統計函式
- DAX文字函式
在本節中,您將學習按函式類別級別的DAX函式。有關DAX函式語法以及DAX函式返回的內容和作用的詳細資訊,請參閱本教程庫中的DAX函式教程。
DAX時間智慧函式和DAX篩選器函式功能強大,需要特別提及。有關詳細資訊,請參閱章節 - 理解DAX時間智慧和DAX篩選器函式。
DAX表值函式
許多DAX函式將表作為輸入或輸出表,或者同時執行兩者。這些DAX函式稱為DAX表值函式。因為表可以只有一列,所以DAX表值函式也採用單列作為輸入。您有以下型別的DAX表值函式:
- DAX聚合函式
- DAX篩選器函式
- DAX時間智慧函式
理解DAX表值函式有助於您有效地編寫DAX公式。
DAX聚合函式
DAX聚合函式聚合錶行上的任何表示式,在計算中很有用。
以下是一些DAX聚合函式:
ADDCOLUMNS (<table>, <name>, <expression>, [<name>, <expression>] …)
AVERAGE (<column>)
AVERAGEA (<column>)
AVERAGEX (<table>, <expression>)
COUNT (<column>)
COUNTA (<column>)
COUNTAX (<table>, <expression>)
COUNTBLANK (<column>)
COUNTROWS (<table>)
COUNTX (<table>, <expression>)
CROSSJOIN (<table1>, <table2>, [<table3>] …)
DISTINCTCOUNT (<column>)
GENERATE (<table1>, <table2>)
GENERATEALL (<table1>, <table2>)
MAX (<column>)
MAXA (<column>)
MAXX (<table>, <expression>)
MIN (<column>)
MINA (<column>)
MINX (<table>, <expression>)
PRODUCT (<column>)
PRODUCTX (<table>, <expression>)
ROW (<name>, <expression>, [<name>, <expression>] …)
SELECTCOLUMNS (<table>, <name>, <scalar_expression>,
[<name>, <scalar_expression>] …)
SUM (<column>)
SUMMARIZE (<table>, <groupBy_columnName>, [<groupBy_columnName>] …, [<name>, <expression>] …)
SUMX (<table>, <expression>)
TOPN (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …)
DAX篩選器函式
DAX篩選器函式返回與當前行相關的列、表或值。您可以使用DAX篩選器函式返回特定資料型別、在相關表中查詢值以及按相關值篩選。DAX查詢函式透過使用表及其之間的關係來工作。DAX篩選器函式使您可以操作資料上下文以建立動態計算。
以下是一些DAX篩選器函式:
ADDMISSINGITEMS(<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] … [filterTable] …)
ALL( {<table> | <column>, [<column>], [<column>] …} )
ALLEXCEPT(<table>, <column>, [<column>] …)
ALLNOBLANKROW(<table>|<column>)
ALLSELECTED([<tableName> | <columnName>])
CALCULATE (<expression>, <filter1>, <filter2>…)
CALCULATETABLE (<expression>, <filter1>, <filter2>…)
CROSSFILTER (<columnName1>, <columnName2>, <direction>)
DISTINCT (<column>)
EARLIER(<column>, <number>)
EARLIEST(<column>)
FILTER(<table>,<filter>)
FILTERS(<columnName>)
HASONEFILTER(<columnName>)
HASONEVALUE(<columnName>)
ISCROSSFILTERED (<columnName>)
ISFILTERED (<columnName>)
KEEPFILTERS (<expression>)
RELATED(<column>)
RELATEDTABLE(<tableName>)
SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnsTable>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …])
USERELATIONSHIP(<columnName1>,<columnName2>)
VALUES(<TableNameOrColumnName>)
DAX時間智慧函式
DAX時間智慧函式返回日期表或使用日期表計算聚合。這些DAX函式幫助您建立支援商業智慧分析需求的計算,使您能夠使用時間段(包括天、月、季度和年)來操作資料。
以下是一些DAX時間智慧函式:
CLOSINGBALANCEMONTH (<expression>,<dates>[,<filter>])
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
DATEADD (<dates>,<number_of_intervals>, <interval>)
DATESBETWEEN (<dates>,<start_date>,<end_date>)
DATESINPERIOD (<dates>,<start_date>, <number_of_intervals>,<interval>)
DATESMTD (<dates>)
DATESQTD (<dates>)
DATESYTD (<dates>, [<year_end_date>])
ENDOFMONTH (<dates>)
ENDOFQUARTER (<dates>)
ENDOFYEAR (<dates> , [<year_end_date>])
FIRSTDATE (<dates>)
FIRSTNONBLANK (<column>,<expression>)
LASTDATE (<dates>)
LASTNONBLANK (<column>,<expression>)
NEXTDAY (<dates>)
NEXTMONTH (<dates>)
NEXTQUARTER (<dates>)
NEXTYEAR (<dates>, [<year_end_date>])
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>])
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
OPENINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
PARALLELPERIOD (<dates>,<number_of_intervals>, <interval>)
PREVIOUSDAY(<dates>)
PREVIOUSMONTH(<dates>)
PREVIOUSQUARTER(<dates>)
PREVIOUSYEAR (<dates>, [<year_end_date>])
SAMEPERIODLASTYEAR(<dates>)
STARTOFMONTH(<dates>)
STARTOFQUARTER(<dates>)
STARTOFYEAR(<dates>)
TOTALMTD (<expression>,<dates>, [<filter>])
TOTALQTD(<expression>,<dates>, [<filter>])
TOTALYTD(<expression>,<dates>, [<filter>], [<year_end_date>])
DAX日期和時間函式
DAX日期和時間函式類似於Excel日期和時間函式。但是,DAX日期和時間函式基於DAX的datetime資料型別。
以下是DAX日期和時間函式:
- DATE(<year>, <month>, <day>)
- DATEVALUE(date_text)
- DAY(<date>)
- EDATE(<start_date>, <months>)
- EOMONTH(<start_date>, <months>)
- HOUR(<datetime>)
- MINUTE(<datetime>)
- MONTH(<datetime>)
- NOW()
- SECOND(<time>)
- TIME(hour, minute, second)
- TIMEVALUE(time_text)
- TODAY()
- WEEKDAY(<date>, <return_type>)
- WEEKNUM(<date>, <return_type>)
- YEAR(<date>)
- YEARFRAC(<start_date>, <end_date>, <basis>)
DAX資訊函式
DAX 資訊函式檢視作為引數提供的單元格或行,並告知您值是否與預期型別匹配。
以下是某些 DAX 資訊函式:
CONTAINS (<table>, <columnName>, <value>, [<columnName>, <value>]…)
CUSTOMDATA()
ISBLANK(<value>)
ISERROR(<value>)
ISEVEN(number)
ISLOGICAL(<value>)
ISNONTEXT(<value>)
ISNUMBER(<value>)
ISONORAFTER (<scalar_expression>, <scalar_expression>, [sort_order], [<scalar_expression>, <scalar_expression>, [sort_order]]…)
ISTEXT(<value>)
LOOKUPVALUE (<result_columnName>, <search_columnName>, <search_value>, [<search_columnName>, <search_value>]…)
USERNAME()
DAX邏輯函式
DAX 邏輯函式返回有關表示式中值的 資訊。例如,DAX TRUE 函式可讓您知道您正在評估的表示式是否返回 TRUE 值。
以下是 DAX 邏輯函式:
- AND(<logical1>,<logical2>)
- FALSE()
- IF(logical_test>,<value_if_true>, value_if_false)
- IFERROR(value, value_if_error)
- NOT(<logical>)
- OR(<logical1>,<logical2>)
- SWITCH(<expression>, <value>, <result>, [<value>, <result>]…, [<else>])
- TRUE()
DAX數學和三角函式
DAX 數學和三角函式與 Excel 數學和三角函式非常相似。
以下是某些 DAX 數學和三角函式:
- ABS(<number>)
- ACOS(number)
- ACOSH(number)
- ASIN(number)
- ASINH(number)
- ATAN(number)
- ATANH(number)
- CEILING(<number>, <significance>)
- COMBIN(number, number_chosen)
- COMBINA(number, number_chosen)
- COS(number)
- COSH(number)
- CURRENCY(<value>)
- DEGREES(angle)
- DIVIDE(<numerator>, <denominator>, [<alternateresult>])
- EVEN(number)
- EXP(<number>)
- FACT(<number>)
- FLOOR(<number>, <significance>)
- GCD(number1, [number2], ...)
- INT(<number>)
- ISO.CEILING(<number>, [<significance>])
- LCM(number1, [number2], ...)
- LN(<number>)
- LOG(<number>,<base>)
- LOG10(<number>)
- INT(<number>)
- MROUND(<number>, <multiple>)
- ODD(number)
- PI()
- POWER(<number>, <power>)
- PRODUCT(<column>)
- PRODUCTX(<table>, <expression>)
- QUOTIENT(<numerator>, <denominator>)
- RADIANS(angle)
- RAND()
- RANDBETWEEN(<bottom>,<top>)
- ROUND(<number>, <num_digits>)
- ROUNDDOWN(<number>, <num_digits>)
- ROUNDUP(<number>, <num_digits>)
- SIN(number)
- SINH(number)
- SIGN(<number>)
- SQRT(<number>)
- SUM(<column>)
- SUMX(<table>, <expression>)
- TAN(number)
- TANH(number)
- TRUNC(<number>,<num_digits>)
DAX其他函式
這些 DAX 函式執行獨特的操作,這些操作無法由大多數其他函式所屬的任何類別定義。
以下是某些 DAX 其他函式:
EXCEPT(<table_expression1>, <table_expression2>)
GROUPBY (<table>, [<groupBy_columnName1>], [<name>, <expression>] … )
INTERSECT(<table_expression1>, <table_expression2>)
ISEMPTY(<table_expression>)
NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)
NATURALLEFTOUTERJOIN(<leftJoinTable>, <rightJoinTable>)
SUMMARIZECOLUMNS (<groupBy_columnName>, [<groupBy_columnName>]…, [<filterTable>] …, [<name>, <expression>]…)
UNION (<table_expression1>, <table_expression2>, [<table_expression>]…)
VAR <name> = <expression>
DAX父子函式
DAX 父子函式可用於管理資料模型中以父子層次結構呈現的資料。
以下是某些 DAX 父子函式:
- PATH(<ID_columnName>, <parent_columnName>)
- PATHCONTAINS(<path>, <item>)
- PATHITEM(<path>, <position>, [<type>])
- PATHITEMREVERSE(<path>, <position>, [<type>])
- PATHLENGTH(<path>)
DAX統計函式
DAX 統計函式與 Excel 統計函式非常相似。
以下是某些 DAX 統計函式:
BETA.DIST(x, alpha, beta, cumulative,[A],[B])
BETA.INV(probability, alpha, beta,[A],[B])
CHISQ.INV(probability, deg_freedom)
CHISQ.INV.RT(probability, deg_freedom)
CONFIDENCE.NORM(alpha, standard_dev, size)
CONFIDENCE.T(alpha, standard_dev, size)
DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2 ..., {{Value1, Value2...}, {ValueN, ValueN+1...}...})
EXPON.DIST(x, lambda, cumulative)
GEOMEAN(<column>)
GEOMEANX(<table>, <expression>)
MEDIAN(<column>)
MEDIANX(<table>, <expression>)
PERCENTILE.EXC(<column>, <k>)
PERCENTILE.INC(<column>, <k>)
PERCENTILEX.EXC(<table>, <expression>, k)
PERCENTILEX.EXC(<table>, <expression>, k)
POISSON.DIST(x, mean, cumulative)
RANK.EQ(<value>, <columnName>[, <order>])
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
SAMPLE (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]]…)
STDEV.P(<ColumnName>)
STDEV.S(<ColumnName>)
STDEVX.P(<table>, <expression>)
STDEVX.S(<table>, <expression>)
SQRTPI(number)
VAR.P(<columnName>)
VAR.S(<columnName>)
VARX.P(<table>, <expression>)
VARX.S(<table>, <expression>)
XIRR(<table>, <values>, <dates>, [guess])
XNPV(<table>, <values>, <dates>, <rate>)
DAX文字函式
DAX 文字函式可用於表格和列。使用 DAX 文字函式,您可以返回字串的一部分,在字串中搜索文字或連線字串值。您還可以控制日期、時間和數字的格式。
以下是某些 DAX 文字函式:
- BLANK()
- CODE(text)
- CONCATENATE(<text1>, <text2>)
- CONCATENATEX(<table>, <expression>, [delimiter])
- EXACT(<text1>,<text2>)
- FIND(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- FIXED(<number>, <decimals>, <no_commas>)
- FORMAT(<value>, <format_string>)
- LEFT(<text>, <num_chars>)
- LEN(<text>)
- LOWER(<text>)
- MID(<text>, <start_num>, <num_chars>)
- REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
- REPT(<text>, <num_times>)
- RIGHT(<text>, <num_chars>)
- SEARCH(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
- TRIM(<text>)
- UPPER (<text>)
- VALUE(<text>)