Como usar a função RANKX no DAX do Power BI para criar rankings dinâmicos

A função RANKX (RANKX(tabela; expressão; [valor]; [ordem]; [empates])) do DAX calcula a posição de um item dentro de um conjunto e recalcula o ranking automaticamente conforme os filtros do relatório mudam; use ALL() na tabela para manter um ranking geral independente de filtros.

Criar rankings dinâmicos é uma das necessidades mais comuns em relatórios de performance. Qual vendedor tem o maior faturamento? Qual produto está em terceiro lugar em vendas? No Power BI, a função RANKX do DAX resolve isso de forma poderosa e totalmente dinâmica, se ajustando automaticamente conforme os filtros do relatório mudam. Neste artigo iremos mostrar como usar o RANKX para criar rankings profissionais nos seus relatórios.

O que é a função RANKX?

O RANKX é uma função DAX que calcula a posição de um valor dentro de um conjunto de valores. Ela percorre uma tabela, avalia uma expressão para cada linha e atribui uma posição baseada na ordem dos resultados.

A sintaxe básica é:

🎓
Quer aprender Excel de verdade, do zero ao avançado? Conheça o Curso Excel pra Ontem — aulas práticas, direto ao ponto, sem enrolação. Do zero ao avançado, no seu ritmo
Conhecer o curso →
RANKX(tabela; expressão; [valor]; [ordem]; [empates])
  • tabela: a tabela que define o conjunto de itens para o ranking
  • expressão: o cálculo que será usado para determinar a posição
  • valor: o valor a ser classificado (opcional, padrão usa o resultado da expressão no contexto atual)
  • ordem: 0 para decrescente (maior = 1°), 1 para crescente (menor = 1°)
  • empates: SKIP ou DENSE para definir como tratar empates

Criando um ranking de vendedores

Para criar um ranking dos vendedores por total de vendas, onde o maior vendedor fica em primeiro lugar:

Ranking Vendedor = 
RANKX(
    ALL(Vendedores[Nome]);
    [Total de Vendas];;
    0
)

O ALL(Vendedores[Nome]) remove todos os filtros da coluna Nome, garantindo que o ranking sempre compare todos os vendedores, mesmo quando um filtro específico está ativo.

Ranking dinâmico com filtros

Uma das grandes vantagens do RANKX é que ele se recalcula automaticamente conforme os filtros mudam. Se você filtrar por região, o ranking mostrará as posições dentro da região filtrada, não o ranking geral. Para forçar o ranking geral independente de filtros, use ALL:

Ranking Geral = 
RANKX(
    ALLSELECTED(Vendedores[Nome]);
    [Total de Vendas];;
    0
)

O ALLSELECTED mantém os filtros de segmentações externas (como seleção de período) mas remove os filtros do visual específico, criando um ranking dentro do contexto atual do relatório.

Ranking de produtos com tratamento de empates

Ranking Produto = 
RANKX(
    ALL(Produtos[Nome]);
    [Total de Vendas];;
    0;
    DENSE
)

O parâmetro DENSE faz com que produtos empatados recebam a mesma posição e a próxima posição seja o número seguinte (1, 2, 2, 3). Com SKIP (padrão), a próxima posição após dois empatados em 2° seria 4°.

Filtrando para mostrar apenas o Top N

Para criar uma medida que só mostra valores para os N primeiros do ranking, combine RANKX com IF:

Vendas Top 5 = 
IF(
    [Ranking Vendedor] <= 5;
    [Total de Vendas];
    BLANK()
)

Quando usada em um visual, essa medida só exibirá valores para os 5 melhores, e os demais ficam em branco (não aparecem no visual se a opção de ocultar brancos estiver ativa).

Ranking dentro de uma categoria

Para criar um ranking dentro de cada categoria (por exemplo, ranking de vendedores dentro de cada região):

Ranking por Região = 
RANKX(
    ALLEXCEPT(Vendedores; Vendedores[Região]);
    [Total de Vendas];;
    0
)

O ALLEXCEPT remove todos os filtros da tabela Vendedores, exceto o filtro de Região. Isso faz com que o ranking seja calculado separadamente para cada região.

Exibindo o ranking com texto formatado

Para exibir o ranking com um texto mais apresentável, como “1°” em vez de apenas “1”:

Posição = 
VAR Rank = [Ranking Vendedor]
RETURN
IF(
    ISBLANK(Rank);
    BLANK();
    Rank & "°"
)

Usando o RANKX em tabelas versus em cartões

O RANKX funciona muito bem em visuais de tabela e matriz, onde cada linha representa um item diferente. Em visuais de cartão, o resultado depende do contexto de filtro ativo. Se nenhum vendedor específico estiver filtrado, o cartão mostrará o ranking do total, o que pode não fazer sentido. Use o RANKX em cartões apenas quando um filtro de item específico estiver ativo.

Perguntas frequentes

O que faz a função RANKX no DAX?

Calcula a posição de um valor dentro de um conjunto, recalculando automaticamente o ranking conforme os filtros do relatório mudam, com a sintaxe RANKX(tabela; expressão; [valor]; [ordem]; [empates]).

Como criar um ranking no DAX que sempre compara todos os itens, mesmo com um filtro específico ativo?

Use ALL() na tabela dentro do RANKX, como RANKX(ALL(Vendedores[Nome]); [Total de Vendas];; 0), removendo os filtros da coluna para manter o ranking geral.

Qual a diferença entre os parâmetros de empate SKIP e DENSE no RANKX?

Com DENSE, itens empatados recebem a mesma posição e a próxima é o número seguinte (1, 2, 2, 3); com SKIP, que é o padrão, a posição seguinte pula os números correspondentes aos empatados (1, 2, 2, 4).


Se você curtiu esse artigo onde mostramos como usar o RANKX no DAX do Power BI, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *