針對PowerPivot的DAX函數參考
一、篩選函數
1、ALL函數:返回表中的所有行貨返回列中的所有值,同時忽略可能已應用的任何篩選器,此函數可用於清除篩選器對錶中的所有行創建計算,返回刪除了篩選器的表或列的值
語法:ALL({<table> | <column>[, <column>[, <column>[,…]]]})
如:創建一個《度量值》
訂單額度 = SUMX(ALL('訂單表'),'訂單表'[amount])
雖然X軸使用日期來統計,顯示的依然是總額度,在不使用ALL函數的一個度量值
訂單額度2 = SUMX('訂單表','訂單表'[amount])
沒有使用ALL時候,時間篩選器就生效了,顯示各日的總額。實際應用中可能會分析日訂單和總額的比率:
計算日訂單和總額的比率 = sumx('訂單表','訂單表'[amount])/sumx(ALL('訂單表'),'訂單表'[amount])
ALL (Column[, Column[, …]]) 刪除表中指定列的所有篩選器,表中針對其他列的所有篩選器仍應用,創建一個度量值:
訂單額度 = SUMX('訂單表','訂單表'[amount])/CALCULATE(SUM('訂單表'[amount]),ALL('訂單表'[create_time],'訂單表'[cancel_rent_time]))
ALLEXCEPT(Table, Column1 [,Column2]...):刪除表中所有上下文篩選器,但已應用於制定列的篩選器除外,創建一個度量值:
訂單額度 = SUMX('訂單表','訂單表'[amount])/SUMX(ALLEXCEPT('訂單表','訂單表'[create_time],'訂單表'[rent_pay_time],'訂單表'[deposit_withdraw_time]), '訂單表'[amount])
ALLSELECTED:選取需要字段過濾其他,只能添加一個參數,同時忽略選取字段的篩選器,其他已應用的篩選器仍然生效,選取的時間仍然創建度量值的表,創建一個度量值:
訂單額度 = SUMX('訂單表','訂單表'[amount])/CALCULATE(SUMX('訂單表','訂單表'[amount]),ALLSELECTED('訂單表'[create_time]))
對比沒有allselectd的情況下的篩選
ALLNOBLANKROW函數:從關係的父表中,返回除空白行之外的所有行,或某一列中除空白行之外的所有非重複值,並且忽略可能存在所有上下文的篩選器。
語法:ALLNOBLANKROW(<table>|<column>)
若選table要刪除其所有上下文篩選器的表,列同理,創建一個度量值
訂單額度222 = CALCULATE(SUMX('訂單表','訂單表'[amount]),ALLNOBLANKROW('訂單表'))
Datekey是張時間的維度表和和訂單表相關聯
,選自己的表的時間,列出當前時間,
使用時間維度表,維度表所有的時間都會顯示一個同一個值
2、CALCULATE函數:計算由指定篩選器修改的上下文中的表達式,作爲表達式的結果值返回。
語法:CALCULATE(<expression>,<filter1>,<filter2>…)
expression要進行計算的表達式
filter1…N定義篩選器的布爾表達式或表表大師的逗號分隔的列表
創建一個度量值:
度量值1 = CALCULATE(SUMx('訂單表','訂單表'[amount]),'訂單表'[status]=200)
限制:不能引用度量值、不能使用CALCULATE嵌套、不能使用掃描表或返回任何函數及聚合函數
訂單額度 = CALCULATE(SUM('訂單表'[amount]),(ALL('訂單表')))
CALCULATETABLE函數:在由給定篩選修改的上下文中計算表表達式,返回包含值得表,在BPI中的建模點新建表,此時不能使用新建度量值。
語法: CALCULATETABLE(<expression>,<filter1>,<filter2>,…)
度量值cal = CALCULATETABLE('訂單表','訂單表'[status]=100)
新度量值 = SUMX(CALCULATETABLE('訂單表','PowerBi 時間維度表'[DayOfMonthFull]="18"),'訂單表'[amount])
此時嵌套在聚合函數裏,返回值的列表
此時說明表達式返回表的多列值,只是根據條件過濾不匹配status=100de
3、DISTINCT:返回一列構成的一個表,該表包含來自指定列的非重複值,一般配合其他聚合函數來使用
語法:DISTINCT(<column>)
度量值cal = COUNTROWS(DISTINCT('訂單表'[status]))
4、EARLIER函數:返回提及的列的外部計算傳遞中指定列的當前值(在想要使用某個值作爲輸入並且基於該輸入進行計算的嵌套計算中)
官檔案例
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
5、EARLIEST函數:返回指定列的外部計算傳遞中制定列的當前值,與4類似
6、FILTER函數:返回表示另一個表達式的子集的表,只包含篩選行的表返回值
語法:FILTER(<table>,<filter>)
參數:
table要篩選的表,表還可以是產生的結果集是表的表達式
Filter爲該表的每一行計算的布爾表達式
FILTERS:返回直接作爲篩選器應用於columnName的值
HASONEFILTER:當columnName上的直接篩選值得數目爲一個值,返回TRUE否則返回FALSE
HASONEVALUE:已將columnName的上下文篩選爲只剩下一個非重複值時返回TRUE,否則FALSE
7、RELATED函數:從另一個表返回相關值,與當前行相關的單個值
語法:RELATED(<column>)
##
RELATED 函數要求當前表與包含相關信息的表之間存在關係。您需要指定包含所需數據的列,該函數將通過現有的多對一關係從相關表中的指定列中提取值
FILTER_RELATED_1 = SUMX(FILTER('訂單表',RELATED('訂單表狀態維度表'[status_id])=101),'訂單表'[amount])
通過通過計算累計101值得累計和
8、RELATEDTABLE函數:由給定篩選器修改的上下文中計算表表達式,返回包含值得表
語法: RELATEDTABLE(<expression>,<filter1>,<filter2>,…)
註釋
RELATEDTETABLE 函數將更改篩選數據的上下文,並在您指定的新上下文中計算表達式。對於在篩選器參數中使用的每一列,將刪除該列上的現有篩選器,改爲應用在篩選器參數中使用的篩選器
###此函數是 CALCULATETABLE 函數的同義詞
9、VALUES函數:返回由一列構成的一個表,包含來自制定列的非重複值。
語法:values(<column>)
註釋
當您在已篩選的上下文(例如數據透視表)中使用 VALUES 函數時,VALUES 返回的唯一值會受到篩選器的影響。例如,如果您按 Region 進行篩選,並且返回針對 City 的值列表,則該列表將只包括篩選器允許的區域中的那些城市。若要返回所有城市,而不管現有篩選器的情況如何,您必須使用 ALL 函數從表中刪除篩選器。第二個示例演示如何將 ALL 與VALUES 一起使用。
VALUES_1 = COUNTROWS(VALUES('訂單表'[id] ))
統計函數(聚合函數):對值得聚合運算,在篩選函數中已經應用部分,其他類似
AVERAGE(<column>)
AVERAGE(<column>):返回列中值的平均值(算術平均值)。處理文本和非數字值
AVERAGEX(<table>,<expression>):計算對錶進行求值的一組表達式的平均值(算術平均值)
COUNTA (<column>)函數計算列中不爲空的單元的數目。它不僅對包含數值的行進行計數,還對包含非空白值(包括文本、日期和邏輯值)的行進行計數
COUNTAX 函數用於在對錶計算表達式的結果時統計非空結果數。即,它的作用與 COUNTA 函數類似,但它用於對錶中所有行進行循環訪問,並統計指定表達式計算爲非空結果的行數
COUNTAX(<table>,<expression>)
COUNTBLANK(<column>) 計算列中空白單元的數目
COUNTROWS函數:計算制定表中的行數,或計算表達式定義的表中的行數
語法:COUNTROWS(<TABLE>)
COUNTX(<table>,<expression>)在對錶計算表達式的結果時,計算包含數字或者計算結果爲數字的表達式的行的數目
MAX
MAXA 返回列中的最大值。邏輯值和空白被計算在內MAXA(<column>) MINA
MAXX爲表的每一行計算表達式,並且返回最大的數值MAXX(<table>,<expression>) MINX
邏輯函數:
AND函數:檢查是否兩個參數均爲TRUE
語法:AND(<LOGICAL1>,<LOGICAL2>)
註釋
DAX 中的 AND 函數只接受兩 (2) 個參數。如果您需要對多個表達式執行 AND 運算,則可以創建一系列計算;但更好的選擇是,使用連接運算符 (&&) 在一個更簡單的表達式中連接所有這些列
FALSE函數:返回邏輯值FALSE
語法:FALSE()
IF函數:檢查是否滿足作爲第一個參數提供的條件,滿足爲TRUE,否則爲FALSE
語法: IF(logical_test>,<value_if_true>, value_if_false)
參數
術語 | 定義 |
logical_test | 計算結果可以爲 TRUE 或 FALSE 的任何值或表達式。 |
value_if_true | 在邏輯測試爲 TRUE 時返回的值。如果省略,則返回 TRUE。 |
value_if_false | 在邏輯測試爲 FALSE 時返回的值。如果省略,則返回 FALSE。 |
=IF([Calls]<200,"low",IF([Calls]<300,"medium","high"))
EGG:
新增列IF = IF([status]=101, "已付押金",IF([status]=200, "租賃中",IF([status]=300, "待付租金",IF([status]=400, "已付租金",IF([status]=500, "未退押金",
IF([status]=600, "交易失敗",IF([status]=700,"申訴中" ,"取消"
)))))))
他的另外一種簡潔語法:
列SWITCH = SWITCH([status],101,"已付押金",200,"租賃中",300,"待付租金",400,"已付租金",500,"未退押金",600,"交易失敗",700,"申訴中","取消")
註釋
如果省略了 value_if_true 或 value_if_false 的值,則 IF 將其視爲空字符串值 (""),
如果在表達式中引用的值是某一列,則 IF 將返回與當前行相對應的值
IF 函數嘗試返回列中的單個數據類型。因此,如果 value_if_true 和 value_if_false 返回的值屬於不同的數據類型,則 IF 函數會隱式轉換數據類型以便適合列中的這兩種值。例如,公式 IF(<condition>,TRUE(),0) 返回由 1 和 0 組成的列,並且可以對結果求和,但公式 IF(<condition>,TRUE(),FALSE()) 只返回邏輯值
IFERROR函數:對某一表達式進行計算,並且如果該表達式返回錯誤則返回指定值,否則返回該表達式本身的值
語法:IFERROR(value,value_if_error)##返回值類型要相同
=IFERROR(25/0,9999)
NOT函數:將FALSE改成TRUE,或者將TRUE改成FALSE
語法:NOT(<logical>)
OR函數 OR(<logical1>,<logical2>)
IF( OR( CALCULATE(SUM('ResellerSales_USD'[SalesAmount_USD]), 'ProductSubcategory'[ProductSubcategoryName]="Touring Bikes") > 1000000
, CALCULATE(SUM('ResellerSales_USD'[SalesAmount_USD]), 'DateTime'[CalendarYear]=2003) > 2500000
)
, "Circle of Excellence"
, ""
)
TRUE函數: 語法:TRUE()
= IF(SUM('InternetSales_USD'[SalesAmount_USD]) >200000, TRUE(), false())
文本函數:
BLAN() 返回空白。
CONCATENATE:將兩個文本字符串連接成一個文本字符串
= CONCATENATE(sumx('訂單表','訂單表'[amount])/sumx(ALL('訂單表'),'訂單表'[amount]),"%")
EXACT函數:比較字符串,相同爲TRUE
EXACT(<TEXT1>,<TEXT2>)
FIND函數: 返回一個文本字符串在另一文本字符串中的開始位置。FIND 區分大小寫。
FIND(<find_text, within_text, start_num)
參數
項 | 定義 |
find_text | 您要查找的文本。使用雙引號(空文本)可以匹配 within_text 中的第一個字符;不允許通配符。 |
within_text | 包含要查找的文本的文本。 |
start_num | 從其開始進行搜索的字符;如果省略,start_num = 1。within_text 中的第一個字符是字符編號 1。 |
FIXED函數: 將數字舍入到指定的小數位數,並以文本形式返回結果。可以指定以帶或不帶逗號的形式返回結果
將數字舍入到指定的小數位數,並以文本形式返回結果。可以指定以帶或不帶逗號的形式返回結果
參數
項 | 定義 |
number | 要舍入並轉換爲文本的數字,或包含數字的列。 |
decimals | (可選)小數點右側的位數;如果省略,則爲 2。 |
no_commas | (可選)一個邏輯值:如果爲 1,則不在返回的文本中顯示逗號;如果爲 0 或省略,則在返回的文本中顯示逗號。 |
FORMAT函數:根據指定的格式轉換爲文本
FORMAT(<value>, <format_string>)
參數
術語 | 定義 |
value | 值或計算結果爲單個值的表達式。 |
format_string | 具有格式模板的字符串。 |
FORMAT函數的預定義數字格式
下表標識預定義數字格式的名稱。可按名稱將它們用作 Format 函數的樣式參數。
格式規範 | 說明 |
"General Number" | 顯示不帶千位分隔符的數字。 |
"Currency" | 顯示帶千位分隔符的數字(如果適用);顯示小數點分隔符右側兩位。輸出基於系統區域設置。 |
"Fixed" | 小數點分隔符左側至少顯示一位,右側顯示兩位。 |
"Standard" | 顯示帶千位分隔符的數字,其中小數點分隔符左側至少有一位,右側有兩位。 |
"Percent" | 將數字乘以 100 後顯示,並在緊右側追加百分號 (%);小數點分隔符右側總是顯示兩位。 |
"Scientific" | 使用標準的科學記數法,並且提供兩個有效位數。 |
"Yes/No" | 如果數字爲 0,則顯示 No;否則顯示 Yes。 |
"True/False" | 如果數字爲 0,則顯示 False;否則顯示 True。 |
"On/Off" | 如果數字爲 0,則顯示 Off;否則顯示 On。 |
FORMAT函數的自定義數字格式
用戶定義的數字格式表達式可以包含一至三個部分(各部分之間用分號分隔)。如果 Format 函數的 Style 參數包含預定義的數字格式之一,則只允許有一部分。
如果您使用 | 則結果爲 |
只有一部分 | 格式表達式應用於所有值。 |
兩部分 | 第一部分應用於正值和零;第二部分應用於負值。 |
三部分 | 第一部分應用於正值,第二部分應用於負值,第三部分應用於零。 |
格式規範
下表標識了可用於創建用戶定義的數字格式的字符。
格式規範 | 說明 |
無 | 顯示不帶格式的數字。 |
0(零字符) | 數字佔位符。顯示一個數字或一個零。如果表達式在格式字符串中出現零的位置有一個數字,則顯示該數字,否則在該位置顯示一個零。 如果數字的位數少於格式表達式中零的個數(不管在小數點的哪一側),將顯示前導零或尾隨零。如果小數點分隔符右側的數字位數多於格式表達式中小數點分隔符右側的零的個數,將對數字四捨五入,使其小數位數與零的個數一樣多。如果小數點分隔符左側的數字位數多於格式表達式中小數點分隔符左側的零的個數,則將顯示多出的位數而不作任何修改。 |
# | 數字佔位符。顯示一個數字或不顯示任何內容。如果表達式在格式字符串中出現 # 字符的位置有一個數字,則顯示該數字,否則該位置什麼也不顯示。 除了當數字的位數少於格式表達式中小數點分隔符任意一側的 # 字符數時不顯示前導零或尾隨零外,該符號的作用類似於零 (0) 數字佔位符。 |
.(圓點字符) | 小數點佔位符。小數點佔位符確定在小數點分隔符左側和右側顯示幾位數。如果格式表達式中該符號的左側只包含 # 字符,則小於 1 的數字以小數點分隔符開頭。若要顯示隨小數顯示的前導零,請使用零作爲小數點分隔符左側的第一個數字佔位符。在某些區域設置中,用逗號作爲小數點分隔符。在格式化輸出中用作小數點佔位符的實際字符取決於系統所識別的數字格式。因此,在您的格式中應將句點用作小數點佔位符,即使您位於使用逗號作爲小數點佔位符的區域設置中。格式化字符串將以適合區域設置的正確格式顯示。 |
% | 百分比佔位符。將表達式乘以 100。在格式字符串中出現百分比字符的位置插入百分比字符 (%)。 |
,(逗號字符) | 千位分隔符。千位分隔符將在小數點分隔符左側具有四位或更多位數的數字中的千位和百位分隔開。如果格式包含一個由數字佔位符(0 或 #)包圍的千位分隔符,則指定千位分隔符的標準用法。 一個千位分隔符緊挨小數點分隔符的左側(無論是否指定小數)或者作爲字符串中最右側的字符表示“通過除以 1000 來將數字按比例減小,並按需要四捨五入”。小於 1,000 但大於或等於 500 的數字顯示爲 1,小於 500 的數字顯示爲 0。此位置有兩個相鄰千位分隔符表示按一百萬倍的比例因子縮小,並且每增加一個分隔符表示另外縮小 1,000 倍。 多個分隔符出現在緊挨小數點分隔符左側或字符串最右側位置被視爲指定使用千位分隔符。在某些區域設置中,用句點作爲千位分隔符。在格式化輸出中用作千位分隔符的實際字符取決於您的系統所識別的數字格式。因此,在您的格式中應將逗號用作千位分隔符,即使您位於使用句點作爲千位分隔符的區域設置中。格式化字符串將以適合區域設置的正確格式顯示。 例如,考慮以下三個格式字符串: “#,0.”,該字符串使用千位分隔符將數字一億的格式設置爲字符串“100,000,000”。 “#0,.”,該字符串按 1000 的因子進行縮小,將數字一億的格式設置爲字符串“100000”。 “#,0,.”該字符串使用千位分隔符和按 1000 的因子進行縮小,將數字一億的格式設置爲字符串“100,000”。 |
:(冒號字符) | 時間分隔符。在某些區域設置中,可能用其他字符表示時間分隔符。在設置時間值的格式時,時間分隔符用於分隔小時、分鐘和秒。在格式化輸出中用作時間分隔符的實際字符取決於您的系統設置。 |
/(正斜槓字符) | 日期分隔符。在某些區域設置中,可能用其他字符表示日期分隔符。在設置日期值的格式時,日期分隔符用於分隔年、月和日。在格式化輸出中用作日期分隔符的實際字符取決於您的系統設置。 |
E-、E+、e-、e+ | 科學記數法格式。如果格式表達式在 E-、E+、e- 或 e+ 的左側至少包含一個數字佔位符(0 或 #),則以科學記數法格式顯示數字,並在數字與其指數之間插入 E 或 e。左側的數字佔位符的個數決定了指數中的數字個數。使用 E- 或 e- 可在負指數的後面放置一個減號。使用 E+ 或 e+ 可在負指數的後面放置一個減號,在正指數的後面放置一個加號。還必須在該符號右側包括數字佔位符以獲取正確的格式。 |
- + $ ( ) | 文字字符。這些字符將完全按格式字符串中所鍵入的形式顯示。若要顯示所列字符以外的其他字符,請在該字符前加上一個反斜槓 (\) 或將該字符放在雙引號 (" ") 中。 |
\(反斜槓字符) | 顯示格式字符串中的下一個字符。若要將具有特殊含義的字符顯示爲文字字符,請在該字符前加上一個反斜槓 (\)。反斜槓本身不顯示。使用反斜槓與將下一個字符放在雙引號中的作用是相同的。若要顯示反斜槓,請使用兩個反斜槓 (\\)。 不能顯示爲文字字符的字符示例爲日期格式字符和時間格式字符(a、c、d、h、m、n、p、q、s、t、w、y、/ 和 :)、數字格式字符(#、0、%、E、e、逗號和句點)和字符串格式字符(@、&、<、> 和 !)。 |
"ABC" | 顯示雙引號 (" ") 裏面的字符串。若要將字符串包含在代碼內的樣式參數中,必須將文本放在 Chr (34) 之間(34 爲引號 (") 的字符代碼)。 |
下表包含用於表示數字的一些示例格式表達式。(所有這些示例均假設您的系統區域設置爲“英語 - 美國”)第一列包含 Format 函數的格式字符串;如果格式化的數據具有在列標題中給定的值,則其他列包含生成的輸出結果。
格式(樣式) | “5”格式設置爲 | “-5”格式設置爲 | “0.5”格式設置爲 | “0”格式設置爲 |
零長度字符串 ("") | 5 | -5 | 0.5 | 0 |
0 | 5 | -5 | 1 | 0 |
0.00 | 5.00 | -5.00 | 0.50 | 0.00 |
#,##0 | 5 | -5 | 1 | 0 |
$#,##0;($#,##0) | $5 | ($5) | $1 | $0 |
$#,##0.00;($#,##0.00) | $5.00 | ($5.00) | $0.50 | $0.00 |
0% | 500% | -500% | 50% | 0% |
0.00% | 500.00% | -500.00% | 50.00% | 0.00% |
0.00E+00 | 5.00E+00 | -5.00E+00 | 5.00E-01 | 0.00E+00 |
0.00E-00 | 5.00E00 | -5.00E00 | 5.00E-01 | 0.00E00 |
"$#,##0;;\Z\e\r\o" | $5 | $-5 | $1 | 零 |
註釋
如果包含兩個連續的分號,則缺少的部分用正值的格式顯示。
預定義日期和時間格式:
下表標識預定義的日期和時間格式的名稱。如果您使用這些預定義的字符串之外的字符串,它們將作爲自定義日期和時間格式來解釋。
格式規範 | 說明 |
"General Date" | 顯示日期和/或時間。例如 3/12/2008 11:07:31 AM。日期顯示由您的應用程序的當前區域性值確定。 |
"Long Date" 或者"Medium Date" | 根據您的當前區域性的長日期格式顯示日期。例如,2008 年 3 月 12 日,星期三。 |
"Short Date" | 使用您的當前區域性的短日期格式顯示日期。例如 3/12/2008。 |
"Long Time" 或者"Medium Time" | 使用您的當前區域性的長時間格式顯示時間;通常包括小時、分鐘和秒。例如,11:07:31 AM。 |
"Short Time" | 使用您的當前區域性的短時間格式顯示時間。例如,11:07 AM。 |
FORMAT函數自定義日期和時間格式:
下表顯示可用於創建用戶定義的日期/時間格式的字符。
格式規範 | 說明 |
(:) | 時間分隔符。在某些區域設置中,可能用其他字符表示時間分隔符。在設置時間值的格式時,時間分隔符用於分隔小時、分鐘和秒。在格式化輸出中用作時間分隔符的實際字符取決於您應用程序的當前區域性值。 |
(/) | 日期分隔符。在某些區域設置中,可能用其他字符表示日期分隔符。在設置日期值的格式時,日期分隔符用於分隔年、月和日。在格式化輸出中用作日期分隔符的實際字符取決於您應用程序的當前區域性。 |
(%) | 用於指示應以單個字母格式讀取後面的字符,而不考慮任何尾隨字母。此外,還用於指示以用戶定義的格式讀取單個字母格式。有關其他詳細信息,請參閱以下內容。 |
d | 將天顯示爲不帶前導零的數字(例如,1)。如果這是用戶定義的數字格式中的唯一字符,則使用 %d。 |
dd | 將天顯示爲帶一個前導零的數字(例如,01)。 |
ddd | 將天顯示爲縮寫(例如,Sun)。 |
dddd | 將天顯示爲全名(例如,Sunday)。 |
M | 將月顯示爲不帶前導零的數字(例如,一月表示爲 1)。如果這是用戶定義的數字格式中的唯一字符,則使用 %M。 |
MM | 將月顯示爲帶一個前導零的數字(例如,01/12/01)。 |
MMM | 將月顯示爲縮寫(例如,Jan)。 |
MMMM | 將月顯示爲完整的月份名稱(例如,January)。 |
gg | 顯示時期/時代字符串(例如,A.D.)。 |
h | 使用 12 小時制時鐘將小時顯示爲不帶前導零的數字(例如,1:15:15 PM)。如果這是用戶定義的數字格式中的唯一字符,則使用 %h。 |
hh | 使用 12 小時制時鐘將小時顯示爲帶前導零的數字(例如,01:15:15 PM)。 |
H | 使用 24 小時制時鐘將小時顯示爲不帶前導零的數字(例如,1:15:15)。如果這是用戶定義的數字格式中的唯一字符,則使用 %H。 |
HH | 使用 24 小時制時鐘將小時顯示爲帶前導零的數字(例如,01:15:15)。 |
m | 將分鐘顯示爲不帶前導零的數字(例如,12:1:15)。如果這是用戶定義的數字格式中的唯一字符,則使用 %m。 |
mm | 將分鐘顯示爲帶前導零的數字(例如,12:01:15)。 |
s | 將秒顯示爲不帶前導零的數字(例如,12:15:5)。如果這是用戶定義的數字格式中的唯一字符,則使用 %s。 |
ss | 將秒顯示爲帶前導零的數字(例如,12:15:05)。 |
f | 顯示秒的小數部分。例如,ff 顯示百分之一秒,而 ffff 顯示萬分之一秒。在用戶定義的格式中最多可以使用 7 個 f 符號。如果這是用戶定義的數字格式中的唯一字符,則使用 %f。 |
t | 使用 12 小時制時鐘,對於中午之前的任何小時都顯示大寫字母 A;對於中午與 11:59 P.M 之間的任何小時都顯示大寫字母 P。如果這是用戶定義的數字格式中的唯一字符,則使用 %t。 |
tt | 對於使用 12 小時制時鐘的區域設置,對中午之前的任何小時都顯示大寫字母 AM;對於中午與 11:59 P.M 之間的任何小時都顯示 PM。 對於使用 24 小時制時鐘的區域設置,不顯示任何內容。 |
y | 將年顯示爲不帶前導零的數字 (0-9)。如果這是用戶定義的數字格式中的唯一字符,則使用 %y。 |
yy | 以帶一個前導零的兩位數字格式顯示年(如果適用)。 |
yyy | 以四位數字格式顯示年。 |
yyyy | 以四位數字格式顯示年。 |
z | 顯示不帶前導零的時區偏移量(例如,-8)。如果這是用戶定義的數字格式中的唯一字符,則使用 %z。 |
zz | 顯示帶一個前導零的時區偏移量(例如,-08) |
zzz | 顯示完整的時區偏移量(例如,-08:00) |
註釋
格式設置字符串區分大小寫。使用不同的大小寫形式,可以獲取不同的格式。例如,當使用字符串“D”格式化日期值時,可以獲得採用長格式的日期(根據您的當前區域設置)。但是,如果將此字母更改爲小寫“d”,則可以獲得採用短格式的日期。此外,如果目標格式與任何定義的格式字符串的大小寫都不匹配,則可能出現意外結果或錯誤。
日期/時間格式使用當前用戶區域設置來確定字符串的最終格式。例如,若要使用下列格式字符串“M/d/yyyy”來設置日期 1995 年 3 月 18 日,如果用戶區域設置爲美國 (en-us),則結果爲“3/18/1995”;但如果用戶區域設置爲德國 (de-de),則結果爲“18.03.1995”
LEFT函數:從文本字符串的開頭返回指定數據的字符--- RIGHT(<text>, <num_chars>)
LEFT(<text>, <num_chars>)
LEN(<TEXT>)
LOWER(<TEXT>) ….UPPER
REPLACE 將基於您指定的字符數,用不同的文本字符串替換文本字符串的一部分。
語法
REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
REPT:重複給定次數的文本。使用 REPT 可用一個文本字符串的許多實例填充單元格。
語法
REPT(<text>, <num_times>)
SEARCH:返回最先找到特定字符或文字字符串的位置的字符編號
語法
SEARCH(<find_text>, <within_text>, [start_num])
SUBSTITUTE:用文本字符中的新文本替換現有文本。
語法
SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
TRIM:從文本刪除兩個詞之間除了但哥空格外的所有空格
語法
TRIM(<text>)
VALUE:將表示數字的文本字符串轉爲數字
語法
VALUE(<text>)
DAX與MySQL語法的比較。
1、 查看錶的所有行記錄
Select * from tb_product_order
DAX: 表 = '訂單表' //返回的表的記錄,不能使用新建度量值方法,
需《建模》--新表
2、 單表過濾條件,在關係型數據庫裏使用WHERE XX=”OO”
SELECT * FROM tb_product_order WHERE STATUS=100
DAX: 表 = FILTER('訂單表','訂單表'[status]=100)
3、多表JOIN連接(左外連接)
SQL:
SELECT tbp.* FROM tb_product_order tbp
LEFT JOIN dim_renttpye dimr
ON tbp.type=dimr.id WHERE dimr.id=1
DAX:
表 = FILTER('訂單表',RELATED('商品消費方式'[id])=1)
4、單表維度使用分組GROUP BY
SELECT `type`,COUNT(`type`) FROM tb_product_order tb GROUP BY `type`
DAX:
表 = GROUPBY('訂單表','訂單表'[type],"AAA",COUNTAX(CURRENTGROUP(),'訂單表'[type]))
5、獲取前幾個最大或最小的值
SELECT amount,DATE(create_time) FROM tb_product_order ORDER BY amount ASC LIMIT 3
DAX:
表 = TOPN(3,'訂單表','訂單表'[amount],ASC)
以上通過簡單的應用返回包含值得表。
返回包含值得表的限制:
1、 表達式不能引用度量值
2、 表達式不能使用嵌套CALCULATE函數
3、 表達式不能使用掃描表或返回表的任何函數,包括聚合函數
DAX一些其他函數使用
度量值:
統計狀態分組數據
度量值SWICH = sumx('訂單表',SWITCH([status],101,'訂單表'[amount],200,'訂單表'[amount],300,'訂單表'[amount],400,'訂單表'[amount],500,'訂單表'[amount],600,'訂單表'[amount],700,'訂單表'[amount],'訂單表'[amount]))
度量值 = SUMMARIZE(CALCULATETABLE('用戶表',FORMAT('用戶表'[create_time],"yyyy")="2017"),'用戶表'[city],'用戶表'[county],"total_count",COUNT('用戶表'[user_id]))
累計註冊用戶數 = IF(
MAX('PowerBi 時間維度表'[DateKey].[Date])<TODAY(),
CALCULATE(COUNT('用戶表'[user_id]),FILTER(ALLSELECTED('PowerBi 時間維度表'[DateKey]),'PowerBi 時間維度表'[DateKey] <= MAX('PowerBi 時間維度表'[DateKey]))))
##返回表,函數嵌套
AA := FILTER(SUMMARIZE('訂單表', '訂單表'[product_id],'訂單表'[create_time],"銷售總額",sum('訂單表'[amount])),[銷售總額]<>0)