Hi, day6讓我們來談談甚麼是正則表達式吧,
在資料處理的過程中, 我們難免會遇到資料非常髒亂的狀況, 但是在電腦的理解中, 有一個很特別的方式, 名稱叫做正則表達式, 英文叫做 Regular Expressions, 功能是可以根據我們所設定(發現)的規則, 讓電腦幫我們去查出或返回我們的需求字串
那麼在tableau中有四種正則表達式的函式提供給我們使用, 今天來介紹以下這兩種, 編寫方法為
那我們在編寫比對模式的時候需要特別注意你的括號使用
情境1:欄位PROM_NAME中, 有各式各樣的名稱, 今天我們收到需求要將這些名稱中有(音樂, 影音, MVPN, 管家)的名稱分類成主要服務, 其他名稱分類為其他服務, 可以怎麼做呢?
第一種方法使用 IF + CONTAINS函式,但大家可以發現這樣的編寫方法除了攏常之外, 還對目標欄位做了多次的運算, 若今天你的資料行數很巨量的話會造成效能降低
IF CONTAINS([PROM_NAME], '音樂')
OR CONTAINS([PROM_NAME], '影音')
OR CONTAINS([PROM_NAME], 'MVPN')
OR CONTAINS([PROM_NAME], '管家')
OR CONTAINS([PROM_NAME], '一號多機')
OR CONTAINS([PROM_NAME], '中嘉')
OR CONTAINS([PROM_NAME], '台灣寬頻')
THEN '主要服務'
ELSE '其他服務'
END
這時就可以使用REGEXP_MATCH函式來簡單優雅的解決
注意比對模式小括號中若有多種字串想判斷, 記得使用 | 符號來做間隔!
情境2:欄位交易序號中, 我們先看到內容極其髒亂, 今天的需求是要把欄位中的英文字母以及後面的四位數字取出來做一個新欄位分類, 我們可以怎麼做, 或許腦海中第一個想法是, 那就使用LEFT 或 RIGHT 函式取出就解決了
不過在此例子中, 我們看到某些內容是前後有不同字數的字串, 導致我們無法直接使用這個方法來處理, 這時我們就可以使用REGEXP_EXTRACT函式
REGEXP_EXTRACT([交易序號],'[0-9]+((T|P)+[0-9]{4})')
我們來看看小括號中的比對模式
[0-9] + ( (T|P) + [0-9]{4} )
由左至右
我們先看
[0-9] 我們發現在英文字母前, 肯定都是有一個0-9的任意數字
接著包一層小括號, 表示我們只要取小括號裡面的字串
(T|P) 我們發現在欄位中, 英文字母只有T或P
[0-9]{4} 我們要取出英文字母後0-9的四位數字
如此一來就解決了這個題目, 在正則表達式中, 還有許多比對模式的寫法, 取決於今天你遇到的欄位&需求是甚麼
Day7讓我們來看如何tableau prep的主要處理方式, 聯集(union)吧!