PREV 函式

您可以從目前值之前指定列數的資料欄擷取值。
  • 擷取值所使用的資料列由執行轉換時資料列的排序決定。如果您正在處理隨機產生的資料集樣本,則您在此函式中看到的值未必會對應到工作執行期間於完整資料集裡產生的值。

  • 如果前一個值為遺漏值或空值,則此函式會產生遺漏值。
  • 對特定範圍的記錄執行轉換時,您可以分別使用 group 參數和 order 參數來定義記錄的群組和順序。
  • 此函式可與下列轉換一起使用:

基本用法

window value:PREV(myNumber, 1) order:Date

輸出:產生新資料欄,其中含有 myNumber 資料欄中,以 Date 排序時,位於目前資料列的前一列資料列的值。

語法

window value:PREV(col_ref, k_integer) order: order_col [group: group_col]

引數是否必要?資料類型說明
col_ref字串資料欄名稱,其值會套用於函式
k_integer整數 (正數)用來擷取值的當前資料列之前的列數

若要進一步瞭解 ordergroup 參數,請參閱 Window 轉換

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

col_ref

資料欄名稱,系統會使用此資料欄的值來擷取當前值之前 k-integer 的指定值。

  • 不支援資料欄和萬用字元。

使用須知:

是否必要?資料類型示例值
字串 (資料欄參照)myColumn

k_integer

整數,代表用來擷取值的當前資料列之前的列數

  • 值必須為正整數。如為負值,請參閱 NEXT 函式一文。
  • k=1 代表緊接在前的列值。
  • 如果 k 大於或等於資料欄中的值數,則產生在資料欄中的值均為遺漏值。如果套用 group 參數,則此參數不應超過群組的最大列數。
  • 如果提供給函式的範圍超過資料集的限制,則函式會產生空值。
  • 如果函式的範圍有效但包含遺漏值,則函式會產生非空值的遺漏值。

使用須知:

是否必要?資料類型示例值
整數4

範例

範例 - 檢查先前的訂單記錄

下列資料集含有幾天內多個客戶的訂單,系統並未按照特定順序列出訂單。您想要評估這段時間內每個客戶的訂單大小變化情形,並依據訂單量的變化為客戶提供優惠。

來源:

DateCustIdOrderIdOrderValue
1/4/16C001Ord002500
1/11/16C003Ord005200
1/20/16C002Ord007300
1/21/16C003Ord008400
1/4/16C001Ord001100
1/7/16C002Ord003600
1/8/16C003Ord004700
1/21/16C002Ord009200
1/15/16C001Ord006900

轉換:

您可以在資料載入「轉換器」頁面時使用 PREV 函式,將前兩張訂單的訂單值擷取到新資料欄。訣竅在於將 window 轉換依日期排序,並按客戶分組:

window value: PREV(OrderValue, 1) order: Date group: CustId

window value: PREV(OrderValue, 2) order: Date group: CustId

rename col: window to: 'OrderValue_1'

rename col: window1 to: 'OrderValue_2'

資料集現在應含有下列資料欄:DateCustIdOrderIdOrderValueOrderValue_1OrderValue_2

兩個新資料欄分別代表前一張訂單和再之前一張訂單。現在,每一列均含有目前的訂單 (OrderValue) 及之前的訂單。您現在想要採取下列客戶動作:

  • 如果與前兩張訂單的總和相比,目前的訂單超過 20% 以上,則會提供退費折扣。
  • 如果與前兩張訂單總和相比,目前的訂單少了 90%,則發送優待卷。
  • 否則,寄送聖誕卡。

如要處理第一個條件,您可以新增下列指令。此指令使用 IF 函式來測試與先前訂單相比,目前訂單的值:

derive type:single value: IF(OrderValue >= (1.2 * (OrderValue_1 + OrderValue_2)), 'send rebate', 'no action') as: 'CustomerAction'

您現在可以看到有哪些客戶可以獲得退費折扣。現在,編輯上述指令,換成下列內容,以處理第二個條件。如果兩種條件都無效,則結果為 send holiday card

derive type:single value: IF(OrderValue >= (1.2 * (OrderValue_1 + OrderValue_2)), 'send rebate', IF(OrderValue <= (1.2 * (OrderValue_1 + OrderValue_2)), 'send coupon', 'send holiday card')) as: 'CustomerAction'

結果:

刪除 OrderValue_1OrderValue_2 資料欄後,資料集應會如下所示。請注意,因為轉換指令所含的 PREV 函式按 CustId 分組,所以記錄順序已變更。

DateCustIdOrderIdOrderValueCustomerAction
1/4/16C001Ord001100send rebate
1/7/16C001Ord002500send rebate
1/15/16C001Ord006900send rebate
1/8/16C003Ord004700send rebate
1/11/16C003Ord005200send rebate
1/21/16C003Ord008400send coupon
1/7/16C002Ord003600send rebate
1/20/16C002Ord007300send rebate
1/21/16C002Ord009200send coupon

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

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

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