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 é:
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.
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.