Como usar LookupRows no AMPscript (e quando trocar por Lookup ou LookupOrderedRows)

Liste várias linhas de uma Data Extension num e-mail com LookupRows, trate o caso sem resultados e saiba quando usar Lookup ou LookupOrderedRows.

Amarela Tutorial Marketing Cloud Engagement 3 min Publicado em

Quando um assinante pode ter várias linhas relacionadas numa Data Extension (pedidos, cursos, agendamentos), você precisa buscar todas elas e montar uma lista dentro do e-mail. É para isso que existe o LookupRows.

As três funções de busca

Função O que devolve Quando usar
Lookup Um valor de uma coluna, da primeira linha encontrada Você só precisa de um dado, como o nome do plano
LookupRows Um conjunto de linhas (rowset), até 2.000 Você precisa de várias linhas
LookupOrderedRows Um rowset ordenado e com limite de quantidade Você quer "os 3 pedidos mais recentes"

Nas três, o primeiro parâmetro é o nome da Data Extension, não a chave externa.

Sintaxe do LookupRows

AMPscript
LookupRows("NomeDaDE", "Coluna1", "Valor1" [, "Coluna2", "Valor2", ...])

Cada par coluna/valor é um filtro de igualdade, e os pares se combinam com "E".

Exemplo: pedidos do assinante

A Data Extension Pedidos tem as colunas Email, Numero, Valor e Status.

AMPscript
%%[
SET @email   = AttributeValue("EmailAddress")
SET @pedidos = LookupRows("Pedidos", "Email", @email, "Status", "Enviado")
SET @total   = RowCount(@pedidos)

IF @total > 0 THEN
]%%
<p>Você tem %%=v(@total)=%% pedido(s) a caminho:</p>
<ul>
%%[
  FOR @i = 1 TO @total DO
    SET @linha  = Row(@pedidos, @i)
    SET @numero = Field(@linha, "Numero")
    SET @valor  = Field(@linha, "Valor")
]%%
  <li>Pedido %%=v(@numero)=%%: R$ %%=FormatNumber(@valor, "N2", "pt-BR")=%%</li>
%%[
  NEXT @i
]%%
</ul>
%%[ ELSE ]%%
<p>Nenhum pedido a caminho no momento.</p>
%%[ ENDIF ]%%

As peças:

  • RowCount(@rowset) diz quantas linhas vieram;
  • Row(@rowset, @i) pega a linha de número @i (a contagem começa em 1);
  • Field(@linha, "Coluna") lê uma coluna daquela linha.

Ordenar e limitar com LookupOrderedRows

Para mostrar só os 3 pedidos mais recentes, troque por LookupOrderedRows, que recebe a quantidade e a ordenação antes dos filtros:

AMPscript
%%[
SET @ultimos = LookupOrderedRows("Pedidos", 3, "DataPedido DESC", "Email", @email)
SET @total   = RowCount(@ultimos)
]%%

A ordenação aceita mais de uma coluna, separadas por vírgula: "DataPedido DESC, Numero ASC".

Desempenho e limites

  • LookupRows devolve no máximo 2.000 linhas. Se precisar de mais, o e-mail não é o lugar certo para essa lista.
  • Cada função de busca é executada para cada assinante do envio. Em envios grandes, evite repetir a mesma busca: guarde o resultado numa variável e reutilize.
  • Filtrar por colunas que fazem parte da chave primária da Data Extension costuma ser mais rápido.

Resumo

Use Lookup para um valor, LookupRows para várias linhas e LookupOrderedRows quando a ordem ou o limite importam. Teste RowCount antes de percorrer o resultado e lembre do limite de 2.000 linhas.

Leia também

Leia também
Título Tipo Plataforma Faixa Leitura
Subscriber Key igual ao e-mail: o cliente que troca de e-mail vira outra pessoa Erro Marketing Cloud Engagement Amarela 4 min
Query Activity em Overwrite direto na Data Extension final Erro Marketing Cloud Engagement Amarela 4 min
“João” no e-mail: acentos quebrados e datas trocadas no import Erro Marketing Cloud Engagement Amarela 3 min
Lookup dentro de loop no AMPscript: rápido no teste, lento no envio real Erro Marketing Cloud Engagement Verde 3 min