IF 函式

IF 函式可讓您在轉換內建構 if/then/else 條件邏輯。

注意:IF 函式可與三元運算子互換。建議使用此函式取代三元運算子。

基本用法

範例:

derive type:single value:IF(State == 'NY','New York, New York!','some other place') as:'isNewYork'

輸出:產生新 isNewYork 資料欄,其中每個資料列均含有 New York, New York! 值, 前提是 State 資料欄中相對應的值需為 NY。否則 isNewYork 的值會是 some other place

巢狀的 IF 範例:

您可以在 IF 陳述式內建構 IF 陳述式,如以下範例所示,如果其中的第一個 IF 得出 false,便會運算第二個 IF 陳述式:

derive type:single value:IF(State == 'NY',0.05,IF(State=='CA',0.08,0)) as:'CoTaxRatesByState'

以下有更詳細的巢狀範例。

語法

下列範例中,如果 test expression 得出 true,系統就會執行 true_expression,否則會執行 false_expression

IF(test_expression, true_expression,false_expression)
引數是否必要?資料類型說明
test_expression字串用來求取值的運算式,必須解析為 truefalse
true_expression字串如果 test_expressiontrue,則執行運算式
false_expression字串如果 test_expressionfalse,則執行運算式

這些運算式均可以是常數 (字串、整數或任何其他支援的常值),或是更為精細的元素或邏輯,然而測試運算式必須可得出布林值。

如要進一步瞭解語法標準,請參閱語言文件語法附註一文。

test_expression

這個參數含有用來求取值的運算式。這個運算式必須解析為布林值 (truefalse)。

使用須知:

是否必要?資料類型示例值
字串 (得出 truefalse 的運算式)(LastName == 'Mouse' && FirstName == 'Mickey')

true_expression,false_expression

如果 test_expression 得出 truetrue_expression 會決定產生的值或條件。如果得出 false,則會套用 false_expression

這些運算式通常會產生輸出值,且可使用常值、函式及資料欄參照的組合。

  • 必須輸入 true 運算式。可以插入空白運算式 ( "")。
  • 如果未提供 false 運算式,false 的結果會產生 false 值。

使用須知:

是否必要?資料類型示例值
字串 (運算式)

請參閱以下範例。

範例

範例 - 基本用法

範例資料:

XY
truetrue
truefalse
falsetrue
falsefalse

轉換:

derive type:single value:IF((X == Y), 'yes','no') as: 'equals'

結果:

輸出如下所示:

XYequals
truetrueyes
truefalseno
falsetrueno
falsefalseyes

範例 - 股票行情

此範例說明如何在單一轉換步驟內,連結多項 if/then/else 條件。

您想要分析一組股票價格,且希望依據一套規則來判斷如何採取購入、賣出或保留的行動。

來源:

TicketQtyBuyPriceCurrentPrice
GOOG10705.25674.5
FB10084.00101.125
AAPL50125.2597.375
MSFT10038.87545.25

轉換:

您可以使用 IF 函式執行運算,判斷是否要採取動作。

注意:若是較大型的資料集,在執行資料欄值的比較作業前,建議您在彙整至來源資料集的獨立參照資料集內,保留每支股票的購入、賣出和保留的運算。請參閱彙整窗格

為了協助計算,請先為每支股票建立包含成本 (Basis) 和目前價值 (CurrentValue) 的資料欄:

derive type:single value:(Qty * BuyPrice) as:'Basis'

derive type:single value:(Qty * CurrentPrice) as:'CurrentValue'

您現在可以依據 BasisCurrentValue 之間的價格差異建構部分規則。

單一 IF 版本:在此例中,最重要的動作就是判斷賣出的時間點。下列規則會寫入目前股價為 $1000 美元或高出成本時的 sell 通知。否則,系統不會在動作資料欄中寫入任何值。

derive type:single value: IF((CurrentValue - 1000 > Basis), 'sell','') as:'action'

巢狀 IF 版本:如果想要買更多該怎麼辦?您可以編輯前一指令來建立下列轉換指令。這個新版本會執行賣出測試,如果結果為 falseCurrentPriceBuyPrice 的 10% 以內,即會寫入 buy 動作。

第一個計算動作執行完畢後,才會執行第二個,因為第二個會取代前面版本中未執行任何動作的 else 字句。請在「方案」面板中,按一下前一項轉換指令加以編輯,以新版本取代原版本:

derive type:single value: IF((CurrentValue - 1000 > Basis), 'sell', IF((abs(CurrentValue - Basis) <= (Basis * 0.1)),'buy','hold')) as:'action'

如果兩個測試得出的值皆非 true,則寫入動作為 hold

您可能會想要使用美元格式設定部分資料欄格式,如下所示:

注意:下列格式設定會在值前面插入美元符號 ($),如此會將資料類型變更為字串。

set col:BuyPrice value:NUMFORMAT(BuyPrice, '$ ##,###.00')

結果:

完成數字格式設定的步驟,並移除資料欄後,資料集應會如下所示:

TicketQtyBuyPriceCurrentPriceBasisCurrentValueaction
GOOG10705.25$ 674.50$ 7,052.50$ 6,745.00buy
FB10084.00$ 101.13$ 8,400.00$ 10,112.50sell
AAPL50125.25$ 97.38$ 6,262.50$ 4,868.75hold
MSFT10038.88$ 45.25$ 3,887.50$ 4,525.00hold

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Dataprep 說明文件
需要協助嗎?請前往我們的支援網頁