Article image
JĂșlio Droszczak
JĂșlio Droszczak25/01/2025 19:42
Compartilhe

📊 FunçÔes de Ranqueamento no SQL e DAX: Organize Seus Dados com PrecisĂŁo!

    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:

    image

    đŸ„ˆ 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:

    image

    🔱 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:

    image

    📊 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:

    image

    🧼 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:

    image

    ⚡ 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! 💬

    JĂșlio CĂ©sar Droszczak - LinkedIn

    Compartilhe
    ComentĂĄrios (0)