Função PREV

Extrai o valor de uma coluna que é um número especificado de linhas antes do valor atual.
  • A linha usada para extrair um valor é determinada pela ordem em que as linhas são organizadas no momento em que a transformação é executada. Se você estiver trabalhando em uma amostra gerada aleatoriamente do conjunto de dados, os valores que você vê para esta função podem não corresponder aos valores que são gerados no conjunto de dados completo durante a execução do job.

  • Se o valor anterior estiver ausente ou nulo, esta função gerará um valor ausente.
  • Você pode usar os parâmetros group e order para definir os grupos de registros e a ordem desses registros em que essa transformação é aplicada.
  • Essa função funciona com as seguintes transformações:

Uso básico

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

Resultado: gera a nova coluna contendo o valor da linha na coluna myNumber imediatamente anterior à linha atual, quando ordenada por Date.

Sintaxe

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

ArgumentoObrigatório?Tipo de dadosDescrição
col_refSstringNome da coluna cujos valores são aplicados à função
k_integerSinteiro (positivo)Número de linhas antes da atual, de onde extrair o valor

Para mais informações sobre os parâmetros order e group, consulte Transformação Window.

Para mais informações sobre os padrões de sintaxe, consulte Notas de sintaxe da documentação da linguagem.

col_ref

Nome da coluna cujos valores são usados para extrair o valor, que são k-integer valores antes do atual.

  • Não há compatibilidade com várias colunas e caracteres curinga.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimString (referência de coluna)myColumn

k_integer

Inteiro representando o número de linhas antes da atual, de onde extrair o valor.

  • O valor precisa ser um número inteiro positivo. Para valores negativos, consulte a função NEXT.
  • k=1 representa o valor da linha imediatamente anterior.
  • Se k for maior ou igual ao número de valores na coluna, todos os valores na coluna gerada estarão ausentes. Se um parâmetro group for aplicado, ele não deverá ser superior ao número máximo de linhas nos grupos.
  • Se o intervalo fornecido para a função exceder os limites do conjunto de dados, a função gerará um valor nulo.
  • Se o intervalo da função for válido, mas incluir valores ausentes, a função gerará um valor ausente e não nulo.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimNúmero inteiro4

Exemplos

Exemplo: examinar o histórico de pedidos anteriores

O conjunto de dados a seguir contém pedidos de vários clientes durante um período de alguns dias, listados sem ordem específica. Seu objetivo é avaliar como o tamanho do pedido mudou para cada cliente com o tempo e oferecer ofertas aos clientes com base nas mudanças no volume de pedidos.

Origem:

DataCustIdOrderIdOrderValue
04/01/16C001Ord002500
11/01/16C003Ord005200
20/01/16C002Ord007300
21/01/16C003Ord008400
04/01/16C001Ord001100
07/01/16C002Ord003600
08/01/16C003Ord004700
21/01/16C002Ord009200
15/01/16C001Ord006900

Transformação:

Quando os dados são carregados na página do "Transformer", você pode usar a função PREV para reunir os valores dos dois pedidos anteriores em uma nova coluna. O truque é ordenar a transformação window pela data e agrupá-la por cliente:

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'

Agora o conjunto de dados terá as seguintes colunas: Date, CustId, OrderId, OrderValue, OrderValue_1, OrderValue_2.

As duas novas colunas representam o pedido anterior e o anterior a este, respectivamente. Agora, cada linha contém o pedido atual (OrderValue), bem como os pedidos anteriores. O objetivo então é executar as seguintes ações em relação aos clientes:

  • Se o pedido atual for mais que 20% maior do que a soma dos dois pedidos anteriores, envie um desconto.
  • Se o pedido atual for inferior a 90% da soma dos dois pedidos anteriores, envie um cupom.
  • Caso contrário, envie um cartão de Natal.

Na primeira situação, você pode adicionar a instrução a seguir, que usa a função IF para testar o valor do pedido atual em relação aos anteriores:

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

Agora você pode ver quais clientes têm direito a um reembolso. Em seguida, edite a instrução acima e a substitua pela próxima, que aborda a segunda condição. Se nenhuma das condições for válida, o resultado será 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'

Resultados:

Após excluir as colunas OrderValue_1 e OrderValue_2, o conjunto de dados precisa ser semelhante ao mostrado a seguir. Observe que a ordem dos registros foi alterada, já que as transformações com as funções PREV foram agrupadas por CustId.

DataCustIdOrderIdOrderValueCustomerAction
04/01/16C001Ord001100enviar desconto
07/01/16C001Ord002500enviar desconto
15/01/16C001Ord006900enviar desconto
08/01/16C003Ord004700enviar desconto
11/01/16C003Ord005200enviar desconto
21/01/16C003Ord008400enviar cupom
07/01/16C002Ord003600enviar desconto
20/01/16C002Ord007300enviar desconto
21/01/16C002Ord009200enviar cupom

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Google Cloud Dataprep
Precisa de ajuda? Acesse nossa página de suporte.