📊 Funções de Ranqueamento no SQL e DAX: Organize Seus Dados com Precisão!
- #SQL
- #Power BI
Você precisa manter uma ordem específica nos seus datasets, especialmente ao trabalhar com tabelas? As funções de ranqueamento são as suas aliadas! Elas são essenciais para apresentar dados em formatos tabulares ou para garantir uma sequência lógica nos resultados. Vamos explorar as principais funções de ranqueamento no SQL e como replicá-las no DAX, com exemplos práticos para você aplicar no seu dia a dia. 💡
🥇 RANK()
- O que faz: Atribui uma classificação para cada linha com base em uma ordem especificada. Valores empatados recebem a mesma classificação, mas a próxima classificação é pulada.
- Fun Fact: Tanto no SQL quanto no DAX, há funções nativas para implementar isso com facilidade.
Exemplo SQL:
SELECT
EmployeeID,
Salary,
RANK() OVER (ORDER BY Salary DESC) AS Rank
FROM Employees;
Exemplo DAX:
Rank =
RANKX(
ALL(Employees),
Employees[Salary],
,
DESC
)
Resultado:
🥈 DENSE_RANK()
- O que faz: Similar ao
RANK()
, mas não pula valores após empates. - Fun Fact: Essa função é suportada nativamente em SQL e DAX para resultados consistentes.
Exemplo SQL:
SELECT
EmployeeID,
Salary,
DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank
FROM Employees;
Exemplo DAX:
DenseRank =
RANKX(
ALL(Employees),
Employees[Salary],
,
DESC,
DENSE
)
Resultado:
🔢 ROW_NUMBER()
- O que faz: Atribui um número único para cada linha com base em uma ordem especificada.
- Fun Fact: No SQL, é direto. No DAX, você precisa usar uma coluna única, como IDs, para garantir números exclusivos.
Exemplo SQL:
SELECT
EmployeeID,
Salary,
ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber
FROM Employees;
Exemplo DAX:
RowNumber =
RANKX(
FILTER(ALL(Employees), Employees[EmployeeID] <> BLANK()),
Employees[EmployeeID],
,
ASC
)
Resultado:
📊 NTILE()
- O que faz: Divide os dados em n grupos iguais (ou quase iguais) e atribui a cada linha um número de grupo.
- Fun Fact: No SQL, isso é nativo. No DAX, requer medidas personalizadas.
Exemplo SQL:
SELECT
EmployeeID,
Salary,
NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile
FROM Employees;
Exemplo DAX:
Quartile =
VAR TotalRows = COUNTROWS(ALL(Employees))
VAR GroupSize = ROUNDUP(DIVIDE(TotalRows, 4), 0)
VAR CurrentRank = RANKX(ALL(Employees), Employees[Salary], , DESC)
RETURN
ROUNDUP(DIVIDE(CurrentRank, GroupSize), 0)
Resultado:
🧮 PERCENT_RANK()
- O que faz: Calcula a posição percentual de cada linha dentro do dataset.
- Fun Fact: No SQL, há suporte nativo. No DAX, você pode simular o comportamento.
Exemplo SQL:
SELECT
EmployeeID,
Salary,
PERCENT_RANK() OVER (ORDER BY Salary ASC) AS PercentRank
FROM Employees;
Exemplo DAX:
PercentRank =
VAR CurrentSalary = Employees[Salary]
VAR TotalRows = COUNTROWS(ALL(Employees))
VAR Rank = RANKX(ALL(Employees), Employees[Salary], , ASC, DENSE)
RETURN
DIVIDE(Rank - 1, TotalRows - 1)
Resultado:
⚡ Conclusão
SQL e DAX são ferramentas poderosas para organizar, ranquear e manipular dados, mas cada uma tem suas peculiaridades:
- SQL oferece funções nativas diretas e práticas para ranking.
- DAX é extremamente flexível, permitindo adaptações dinâmicas para visuais, embora exija mais esforço em cenários complexos.
Agora que você conhece essas funções, pode utilizá-las para criar dashboards mais organizados e análises mais precisas. 🚀
Tem alguma dúvida ou quer compartilhar suas experiências? Deixe nos comentários! 💬