DAX中用於處理文本的函數,和其他語言很相似。
一,文本連接
文本連接也可以使用操作符 & 來實現,也可以使用函數CONCATENATE來實現:
CONCATENATE(<text1>, <text2>)
把整個表中的所有行,使用分隔符拼接為一個字符串,返回值是一個字符串,不常用:
CONCATENATEX(<table>, <expression>, [delimiter])
按照分隔符,對多個字符串進行連接,返回一個字符串:
COMBINEVALUES(<delimiter>, <expression>, <expression>[, <expression>]…)
例如,對DimDate表中每一行,把字段MonthName和CalendarYear以分隔符","組合在一起:
DISTINCT(SELECTCOLUMNS(DimDate, "Month", COMBINEVALUES(",", [MonthName], [CalendarYear])))
二,文本比較
比較兩個文本是否相同,返回True或False
EXACT(<text1>,<text2>)
三,文本查找
FIND函數是大小寫敏感的,用於從within_text中查找find_text,如果存在該文本,返回第一次匹配的字符串首字符的位置;如果沒有查找到,那么返回NotFoundValue指定的值,或者BLANK()。
FIND(<find_text>, <within_text>[, [<start_num>][, <NotFoundValue>]])
FIND函數不支持通配符,SEARCH函數支持通配符查找,但是SEARCH不區分大小寫,但是區分重音。
SEARCH(<find_text>, <within_text>[, [<start_num>][, <NotFoundValue>]])
CONTAINSSTRING函數用於檢查是否包含特定的文本,該函數不區分大小寫,並且可以使用通配符(?代表單字符,*代表任意字符,~用於轉義通配符)
CONTAINSSTRING(<within_text>, <find_text>)
CONTAINSSTRINGEXACT函數用於檢查是否完全包含特定的文本,該函數區分大小,不可以使用通配符:
CONTAINSSTRINGEXACT(<within_text>, <find_text>)
例如,下面DAX表達式返回的值是TRUE、FALSE、FALSE、FALSE:
ROW( "Case 1", CONTAINSSTRINGEXACT("abcd", "bc"), "Case 2", CONTAINSSTRINGEXACT("abcd", "BC"), "Case 3", CONTAINSSTRINGEXACT("abcd", "a*d"), "Case 4", CONTAINSSTRINGEXACT("abcd", "ef") )
四,格式化文本
FIXED 用於把數字舍入到指定的小數位數,並把結果轉換為文本返回,如果把no_commas設置為1,在結果中不顯式逗號;如果設置為0,或者忽略,在結果中顯式逗號。
FIXED(<number>, <decimals>, <no_commas>)
FORMAT函數用於格式化文本,用於把日期和數值類型顯式為特定格式的文本:
FORMAT(<value>, <format_string>)
五,截取子串
從文本指定的開始位置和結束位置處截取子串
LEFT(<text>, <num_chars>) RIGHT(<text>, <num_chars>) MID(<text>, <start_num>, <num_chars>)
六,替換字符串
把old_text中從start_num開始的num_chars個字符替換為new_text:
REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
從文本中把old_text替換為new_text,替換的次數由參數instance_num決定:
SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
七,其他字符串函數
- LOWER(<text>) :轉換為小寫
- UPPER (<text>) :轉換位大寫
- TRIM(<text>) :移除文本兩端的空格
- REPT(<text>, <num_times>):把文本重復num_times次
- CODE(text) :把文本的首字符轉換位ASCII編碼
- UNICHAR(number):把數字轉換為Unicode
- LEN(<text>):文本的長度
- VALUE(<text>):把文本格式的數字轉換位數值類型
參考文檔:
