# SubField - 指令碼與圖表函數

Subfield() 用於從上層字串欄位中擷取子字串元件，其中原始記錄欄位包含兩個或多個由分隔符號分隔的部分。

可以使用 Subfield() 函數，例如，為了從包含完整名稱的記錄清單中擷取名字和暱稱、路徑名稱的元件部分，或者從逗點分隔的表格中擷取資料。

如果您在 LOAD 陳述式中使用 Subfield() 函數，並且省略選用 field\_no 參數，將針對每一個子字串產生一筆完整記錄。如果使用 Subfield() 載入數個欄位，則會建立所有組合的 Cartesian 產品。

語法：

SubField(text, delimiter[, field\_no ])

傳回的資料類型： 字串

引數：

SubField 引數

| 引數 | 描述 |
| --- | --- |
| text | 原始字串。這可以是硬式編碼文字、變數、貨幣符號展開或其他運算式。 |
| delimiter | 輸入 text 內將字串分為元件部分的字元。 |
| field\_no | 選用第三引數是一個整數，指定要傳回上層字串 text 中的哪個子字串。<br><br><ul> <li>若 <span>field_no</span> 為正值，會由左至右擷取子字串。</li> <li>若 <span>field_no</span> 為負值，會由右至左擷取子字串。</li> </ul> |

提示備註可以使用 SubField()，來取代函數的複雜組合 (例如 Len()、Right()、Left()、Mid() 及其他字串函數)。

範例與結果：

範例 1-3

| 範例 | 結果 |
| --- | --- |
| ` SubField('abc;cde;efg', ';', 2)  ` | 傳回 'cde' |
| ` SubField('', ';', 1)  ` | 傳回 NULL |
| ` SubField(';', ';', 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;`

範例 4

| Name | FirstName | Surname |
| --- | --- | --- |
| Dave Owen | Dave | Owen |
| Joe Tem | Joe | Tem |

假設您有一個保留路徑名稱 vMyPath 的變數，

`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`.

在文字 & 影像圖表中，您可以新增量值，例如：  
`SubField(vMyPath, '\',-3``)`，這會產生「Qlik」，因為這是從變數 vMyPath 最右邊數來的第三個子字串。

此範例顯示如何從單個執行個體 Subfield() 中建立多列。

新增範例指令碼到您的文件中並加以執行。然後至少將結果資料行中所列的欄位新增至您文件中的工作表，以查看結果。

`LOAD DISTINCT` `Player,` `SubField(Project,',') as Project;` ` ` `Load * inline [` `Player|Project` `Neil|Music,OST` `Jo|Music` `Mike|Music,OST,Video` `] (delimiter is '|');`

範例 5

| Player | Project |
| --- | --- |
| Neil | Music |
| Neil | OST |
| Jo | Music |
| Mike | Music |
| Mike | OST |
| Mike | Video |

此範例顯示如何使用 Subfield() 函數的多個執行個體，每個除去 field\_no 參數，其中相同的 LOAD 陳述式建立所有組合的 Cartesian 產品。DISTINCT 選項用來避免建立重複記錄。

新增範例指令碼到您的文件中並加以執行。然後至少將結果資料行中所列的欄位新增至您文件中的工作表，以查看結果。

`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 '|');`

範例 6

| 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 |