Pular para o conteúdo principal

ExecuteFilterOrderedRows

Descrição​

Executa um filtro de dados (Data Filter) previamente criado no Marketing Cloud e retorna um rowset ordenado com os resultados. É a versão "com ordenação" da ExecuteFilter - você define por qual coluna quer ordenar e em qual direção (crescente ou decrescente). Funciona exclusivamente com filtros baseados em Data Extensions, não com profile attributes.

Sintaxe​

ExecuteFilterOrderedRows(dataFilterExternalId, numRows, sortColumn)

Parâmetros​

ParâmetroTipoObrigatórioDescrição
dataFilterExternalIdStringSimExternal ID (chave externa) do filtro de dados a ser executado. O filtro precisa ser baseado em uma Data Extension.
numRowsNúmeroSimNúmero de linhas a retornar no rowset. Use 0 para retornar todos os resultados. Não há limite máximo de linhas.
sortColumnStringSimNome da coluna para ordenação, seguido de um espaço e ASC (crescente) ou DESC (decrescente).

Exemplo básico​

Imagine um programa de fidelidade da MegaStore onde você precisa listar os clientes com mais de 50.000 pontos, ordenados do maior para o menor saldo, em uma CloudPage.

%%[

/* Executa o filtro "Clientes_50k_pontos" ordenando por PontosAcumulados decrescente */
SET @resultados = ExecuteFilterOrderedRows("c5a7e0d9-41e0-4068-bdcc-8766d7c1af94", 0, "PontosAcumulados DESC")

SET @totalLinhas = RowCount(@resultados)

IF @totalLinhas > 0 THEN

FOR @i = 1 TO @totalLinhas DO

SET @linha = Row(@resultados, @i)
SET @nome = Field(@linha, "PrimeiroNome")
SET @sobrenome = Field(@linha, "Sobrenome")
SET @pontos = Field(@linha, "PontosAcumulados")

]%%

<p>%%=v(@i)=%%. %%=v(@nome)=%% %%=v(@sobrenome)=%% - %%=FormatNumber(@pontos, "N0")=%% pontos</p>

%%[

NEXT @i

ENDIF

]%%

Saída:

1. Maria Santos - 201.042 pontos
2. João Silva - 92.374 pontos
3. Carlos Mendes - 69.311 pontos

Exemplo avançado​

Uma CloudPage da Lojas Vitória exibe o ranking dos top 5 clientes do programa de recompensas, com formatação de tabela HTML e destaque para o tier de cada membro.

%%[

SET @filtroId = "c5a7e0d9-41e0-4068-bdcc-8766d7c1af94"
SET @clientes = ExecuteFilterOrderedRows(@filtroId, 5, "PontosAcumulados DESC")
SET @total = RowCount(@clientes)

IF @total > 0 THEN

]%%

<h2>🏆 Ranking Lojas Vitória - Programa Fidelidade</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr>
<th>Posição</th>
<th>Cliente</th>
<th>Pontos</th>
<th>Tier</th>
<th>Cidade</th>
</tr>

%%[

FOR @i = 1 TO @total DO

SET @linha = Row(@clientes, @i)
SET @nome = Field(@linha, "PrimeiroNome")
SET @sobrenome = Field(@linha, "Sobrenome")
SET @pontos = Field(@linha, "PontosAcumulados")
SET @tier = Field(@linha, "NivelRecompensa")
SET @cidade = Field(@linha, "Cidade")

/* Define o nome do tier com base no nível */
SET @nomeTier = IIF(@tier == 1, "Diamante", IIF(@tier == 2, "Ouro", IIF(@tier == 3, "Prata", "Bronze")))

/* Monta o nome completo */
SET @nomeCompleto = Concat(@nome, " ", @sobrenome)

]%%

<tr>
<td>%%=v(@i)=%%</td>
<td>%%=v(@nomeCompleto)=%%</td>
<td>%%=FormatNumber(@pontos, "N0")=%% pts</td>
<td>%%=v(@nomeTier)=%%</td>
<td>%%=v(@cidade)=%%</td>
</tr>

%%[

NEXT @i

]%%

</table>

%%[

ELSE

]%%

<p>Nenhum cliente encontrado com pontuação suficiente.</p>

%%[

ENDIF

]%%

Saída:

🏆 Ranking Lojas Vitória - Programa Fidelidade

Posição | Cliente | Pontos | Tier | Cidade
1 | Maria Santos | 201.042 pts | Diamante | São Paulo
2 | João Silva | 92.374 pts | Ouro | Curitiba
3 | Carlos Mendes | 69.311 pts | Prata | Belo Horizonte

Observações​

⚠️ Atenção: Esta função funciona apenas em CloudPages, landing pages, microsites e mensagens SMS criadas no MobileConnect. Não use em e-mails - ela simplesmente não vai funcionar nesse contexto.

⚠️ Atenção: O filtro de dados referenciado precisa ser baseado em uma Data Extension. Filtros baseados em profile attributes não são suportados por esta função.

💡 Dica: O parâmetro numRows com valor 0 retorna todos os resultados do filtro. Se você precisa de um ranking (top 10, top 5), passe o número exato - isso deixa o código mais eficiente e evita processar linhas desnecessárias.

💡 Dica: Se você precisa dos resultados filtrados mas não precisa de ordenação, use a ExecuteFilter. Se precisa de ordenação mas quer filtrar diretamente por valores (sem um Data Filter pré-criado), considere LookupOrderedRows.

Funções relacionadas​

  • ExecuteFilter - mesma ideia, mas sem ordenação dos resultados
  • LookupOrderedRows - busca ordenada direta na DE, sem depender de um Data Filter
  • Row - extrai uma linha específica do rowset retornado
  • RowCount - conta quantas linhas o rowset contém
  • Field - extrai o valor de uma coluna de uma linha do rowset