全部展開/全部摺疊
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 選項,以免產生重複記錄。