Como criar um ranking com RANKX em DAX: passo a passo
Ordenar produtos, vendedores ou regiões por desempenho é uma das perguntas mais comuns em Business Intelligence. Em DAX, a função RANKX permite criar um ranking dinâmico que reage aos filtros do relatório, atribuindo a cada elemento a sua posição — 1.º, 2.º, 3.º — com base numa medida. Este tutorial mostra, passo a passo e com um exemplo, como criar um ranking com RANKX no Power BI.
Pré-requisitos
- Power BI Desktop instalado (versão gratuita).
- Um modelo com uma tabela de factos (ex.:
Vendas) e uma dimensão (ex.:Produto). - Conhecer o básico de medidas em DAX (como criar uma medida com
SUM).
Passo 1: Criar a medida base
Antes de ordenar, precisamos de algo para ordenar. Vamos criar uma medida simples que soma o valor das vendas. Clique com o botão direito na tabela Vendas, escolha Nova medida e escreva:
Total Vendas = SUM ( Vendas[Valor] )
Esta medida devolve o total de vendas no contexto atual — por produto, por mês ou global, consoante o visual onde a colocar. É sobre este valor que o ranking vai ser calculado.
Passo 2: Criar o ranking com RANKX
Agora criamos a medida de ranking. A ideia é comparar cada produto com todos os outros e devolver a sua posição. Crie uma nova medida:
Ranking Produtos =
RANKX (
ALL ( Produto[Nome] ),
[Total Vendas],
,
DESC,
Dense
)
Explicando cada argumento: ALL ( Produto[Nome] ) devolve a lista completa de produtos; [Total Vendas] é o valor avaliado para cada produto; o argumento vazio a seguir é o parâmetro opcional value, que deixamos em branco para o RANKX usar o valor da linha atual; DESC coloca o valor mais alto em 1.º lugar; e Dense controla a forma como os empates são tratados (ver Passo 4).
Passo 3: Perceber o papel de ALL
Este é o passo onde a maioria das pessoas se engana. Se escrever RANKX ( Produto, [Total Vendas] ) sem ALL, todos os produtos aparecem com o ranking 1. Porquê? Porque, numa tabela ou matriz, cada linha já está filtrada para um único produto — o contexto de filtro reduz a tabela a essa única linha, e um valor sozinho fica sempre em primeiro.
A função ALL remove esse filtro e devolve todos os produtos, dando ao RANKX uma lista completa para comparar. Regra prática: o primeiro argumento do RANKX deve conter a lista inteira contra a qual quer ordenar.
Passo 4: Controlar empates e ordem
O argumento de ordenação aceita DESC (maior valor = 1.º, o mais comum num ranking de vendas) ou ASC (menor valor = 1.º, útil para rankings de custo ou de tempo). O último argumento define os empates:
- Dense: dois produtos empatados em 2.º são ambos 2.º e o seguinte é 3.º (1, 2, 2, 3).
- Skip: dois empatados em 2.º são ambos 2.º e o seguinte salta para 4.º (1, 2, 2, 4).
Escolha Dense quando quer um ranking contínuo sem saltos e Skip quando quer refletir quantos elementos ficaram à frente.
Passo 5: Mostrar apenas o Top 5
Um uso frequente do ranking é destacar os melhores. Pode reutilizar a medida para mostrar só os cinco primeiros produtos:
Top 5 Vendas =
IF ( [Ranking Produtos] <= 5, [Total Vendas], BLANK () )
Ao colocar esta medida num visual e filtrar os valores em branco, fica apenas o Top 5. Como o RANKX é dinâmico, o ranking recalcula-se sempre que o utilizador aplica filtros de ano, categoria ou região.
Verificar o resultado
Crie uma tabela (visual Tabela) com o campo Produto[Nome] e as medidas Total Vendas e Ranking Produtos. Ordene a coluna do ranking por ordem crescente: o produto com mais vendas deve mostrar 1, o segundo deve mostrar 2, e assim por diante. Se todos mostrarem 1, falta o ALL no primeiro argumento. Aplique um filtro (por exemplo, um ano específico) e confirme que as posições se recalculam.
Conclusão
Com uma única medida RANKX já consegue criar rankings dinâmicos que respondem aos filtros do relatório, controlar a ordem e gerir empates. O próximo passo natural é combinar o ranking com CALCULATE para ordenar dentro de categorias (por exemplo, o Top 3 de cada família de produto) usando ALLEXCEPT. Qual vai ser o primeiro ranking que vai construir no seu relatório — produtos, vendedores ou regiões?