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( 'abc;cde;efg', ';' ,2 )
|
傳回 cde |
SubField( Null, ';' ,1 )
|
傳回空字串 |
SubField( ';', ';' ,1 )
|
傳回空字串 |
SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )
|
傳回 Qlik |
範例 - SubField 基礎事項
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
載入到稱為 Example 之資料表格的資料集。
-
資料表格中稱為 Name 的一個欄位。
載入指令碼
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
建立下列計算維度:
-
=SubField(Name, ' ',1),用來擷取出現在空格 ' ' 分隔符號之前的第一個子字串。
-
=SubField(Name, ' ',-1),用來擷取出現在空格 ' ' 分隔符號之前的第一個子字串,從字串右側開始。
Results table
Name |
SubField(Name, ' ',1) |
SubField(Name, ' ',-1) |
Dave Owen |
Dave |
Owen |
Joe Tem |
Joe |
Tem |
SubField() 函數將 field_no 引數設定為 1,以擷取 Name 的第一個子字串。由於 field_no 的值為正值,擷取子字串時會按照由左至右的順序。第二個函數呼叫將 field_no 引數設定為 -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;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
Results table
Name |
FirstName |
SurName |
Dave Owen |
Dave |
Owen |
Joe Tem |
Joe |
Tem |
解釋
SubField 函數將 field_no 引數設定為 1,以擷取第一個子字串 Name。由於 field_no 的值為正值,擷取子字串時會按照由左至右的順序。第二個函數呼叫將 field_no 引數設定為 -1,以擷取第二個子字串,這按照由右至左的順序擷取子字串。
範例 - SubField 使用情境
概述
產品資料集包含一個產品表格。表格中的每個產品都有一個標記欄位,可識別產品領域。產品的標記欄位可以有多個值。例如,小組件 A 有以下標記:電子產品、小裝置、居家。標記值由管線分隔符號 (|) 字元作為分隔符號。此範例向您顯示如何使用 SubField 函數擷取特定標記值。
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
載入到稱為 Example 之資料表格的資料集。
-
資料表格中的欄位如下:
-
ProductID
-
ProductName
-
Tags
-
Sales
載入指令碼
Example:
Load *
INLINE [
ProductID, ProductName, Tags, Sales
1, Widget A, Electronics|Gadgets|Home, 150
2, Widget B, Electronics|Accessories, 200
3, Widget C, Furniture|Home, 100
4, Widget D, Gadgets|Accessories, 250
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
ProductID
-
ProductName
-
Tags
建立下列計算維度:
-
=SubField(Tags, '|',1),用來擷取 Tags 欄位中的第一個項目。
-
=SubField(Tags, '|',2),用來擷取 Tags 欄位中的第二個項目。
-
=SubField(Tags, '|',3),用來擷取 Tags 欄位中的第二個項目。
Results table
ProductID |
ProductName |
Tags |
SubField(Tags, '|', 1) |
SubField(Tags, '|', 2) |
SubField(Tags, '|', 3) |
1 |
Widget A |
Electronics|Gadgets|Home |
Electronics |
Gadgets |
Home |
2 |
Widget B |
Electronics|Accessories |
Electronics |
Accessories |
- |
3 |
Widget C |
Furniture|Home |
Furniture |
Home |
- |
4 |
Widget D |
Gadgets|Accessories |
Gadgets |
Accessories |
- |
SubField 函數的輸出已成功傳回原始 Tags 字串中相關位置的標記。
載入指令碼
開啟 資料載入編輯器 並將以下載入指令碼新增至新的索引標籤。
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 '|');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Instrument
-
Player
-
Project
Results table
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 選項,以免產生重複記錄。