SubField - 指令碼與圖表函數
SubField() 用來從上層字串欄位中擷取子字串元件,其中原始記錄欄位包含兩個或多個部分,以分隔符號分隔。
可以使用 Subfield() 函數,例如,為了從包含完整名稱的記錄清單中擷取名字和暱稱、路徑名稱的元件部分,或者從逗點分隔的表格中擷取資料。
如果您在 LOAD 陳述式中使用 Subfield() 函數,並且省略選用 field_no 參數,將針對每一個子字串產生一筆完整記錄。如果使用 Subfield() 載入數個欄位,則會建立所有組合的 Cartesian 產品。
語法:
SubField(text,
delimiter[, field_no ])
傳回的資料類型: 字串
引數:
引數
text
|
原始字串。這可以是硬式編碼文字、變數、貨幣符號展開或其他運算式。 |
delimiter
|
輸入 text 內將字串分為元件部分的字元。 |
field_no
|
選用第三引數是一個整數,指定要傳回上層字串 text 中的哪個子字串。使用值 1 可傳回第一個子字串,使用值 2 可傳回第二個子字串,以此類推。
- 若 field_no 為正值,會從左至右擷取子字串。
- 若 field_no 為負值,會從右至左擷取子字串。
|
提示備註 可以使用 SubField(),來取代函數的複雜組合 (例如 Len()、Right()、Left()、Mid() 及其他字串函數)。
範例:圖表運算式
SubField(S, ';' ,2)
|
如果 S 為 'abc;cde;efg',則傳回 'cde'。 |
SubField(S, ';' ,1)
|
如果 S 為空字串,則會傳回空字串 。 |
SubField(S, ';' ,1)
|
如果 S 為 ';',則傳回空字串。 |
假定您有一個包含路徑名稱 vMyPath,
Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;。
|
在文字與影像圖表中,您可以新增量值,例如: SubField(vMyPath, '\',-3),這將產生 'Qlik’,因為它是從變數 vMyPath 右端起的第三個子字串。 |
範例:使用 SubField 的指令碼和圖表運算式
基本範例
SubField(S, ';' ,2)
|
如果 S 為 'abc;cde;efg',則傳回 'cde'。 |
SubField(S, ';' ,1)
|
如果 S 為空字串,則會傳回空字串 。 |
SubField(S, ';' ,1)
|
如果 S 為 ';',則傳回空字串。 |
假定您有一個包含路徑名稱 vMyPath,
Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;。
|
在文字與影像圖表中,您可以新增量值,例如: SubField(vMyPath, '\',-3),這將產生 'Qlik’,因為它是從變數 vMyPath 右端起的第三個子字串。 |
指令碼範例 1
載入指令碼
在資料載入編輯器中載入下列指令碼運算式和資料。
FullName:
LOAD * inline [
Name
'Dave Owen'
'Joe Tem'
];
SepNames:
Load Name,
SubField(Name, ' ',1) as FirstName,
SubField(Name, ' ',-1) as Surname
Resident FullName;
Drop Table FullName;
建立視覺化
在 Qlik Sense 工作表中建立具有 Name、FirstName 和 SurName 作為維度的表格視覺化。
結果
Name |
FirstName |
SurName |
Dave Owen |
Dave |
Owen |
Joe Tem |
Joe |
Tem |
解釋
SubField() 函數將 field_no 引數設定為 1,以擷取 Name 的第一個子字串。由於 field_no 的值為正值,擷取字串時會按照由左至右的順序。第二個函數呼叫將 field _no 引數設定為 -1,以擷取第二個子字串,這按照由右至左的順序擷取子字串。
指令碼範例 2
載入指令碼
在資料載入編輯器中載入下列指令碼運算式和資料。
LOAD DISTINCT
Instrument,
SubField(Player,',') as Player,
SubField(Project,',') as Project;
Load * inline [
Instrument|Player|Project
Guitar|Neil,Mike|Music,Video
Guitar|Neil|Music,OST
Synth|Neil,Jen|Music,Video,OST
Synth|Jo|Music
Guitar|Neil,Mike|Music,OST
] (delimiter is '|');
建立視覺化
在 Qlik Sense 工作表中建立具有 Instrument、Player 和 Project 作為維度的表格視覺化。
結果
Instrument |
Player |
Project |
Guitar |
Mike |
Music |
Guitar |
Mike |
Video |
Guitar |
Mike |
OST |
Guitar |
Neil |
Music |
Guitar |
Neil |
Video |
Guitar |
Neil |
OST |
Synth |
Jen |
Music |
Synth |
Jen |
Video |
Synth |
Jen |
OST |
Synth |
Jo |
Music |
Synth |
Neil |
Music |
Synth |
Neil |
Video |
Synth |
Neil |
OST |
解釋
此範例展示如何從相同的 LOAD 陳述式中使用 Subfield() 函數的多個執行個體 (每個執行個體均忽略 field_no 參數) 建立所有組合的笛卡兒乘積。將使用 DISTINCT 選項,以免產生重複記錄。