image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Júlio Droszczak
Júlio Droszczak23/09/2024 23:52
Compartilhe

🚀 DAX: Usando a Função FORMAT para Formatação de Valores 🚀

    Olá pessoal, compartilho aqui com vocês estas referências sobre formatação no Power BI.

    Júlio César Droszczak - Specialist Data Analyst Engineer

    A função FORMAT no DAX é uma ferramenta poderosa para converter valores em texto com um formato especificado. Isso permite exibir números, datas, ou horas de maneira customizada, facilitando a leitura e compreensão das informações em relatórios.

     

    🌟 Sintaxe da Função FORMAT:

    FORMAT(<Valor>, <Formato> [, <NomeDoLocal>])
    

     

    Parâmetros:

    • Valor: Um número ou fórmula que avalie um valor numérico.
    • Formato: A string que define o formato desejado.
    • NomeDoLocal (Opcional): Nome da localidade para formatação específica de acordo com a cultura do usuário.

    Resultado: Sempre uma string formatada de acordo com o formato especificado. Se o valor for BLANK, a função retorna uma string vazia.

    🧠 Observações Importantes:

    • Os formatos de número suportados na função DAX FORMAT são baseados no Visual Basic (OLE Automation) e não no .NET Framework. Isso significa que algumas abreviações como "p" para percentagem não são suportadas.
    • Caso você precise exibir um texto literal, use aspas duplas dentro da string de formato.
    • A configuração de nomes de dias e meses depende das configurações regionais do seu arquivo ou base de dados.

    💡 Exemplo 01:

    Usando FORMAT para formatação de percentagens, moedas e datas.

    EVALUATE
    {
      ( "Percent",      FORMAT (                0.742, "Percent" )        ),
      ( "Currency (1)", FORMAT (             1234.567, "$#,0.00" )        ),
      ( "Currency (2)", FORMAT (             1234.567, """US$"" #,0.00" ) ),
      ( "Date (1)",     FORMAT ( DATE ( 2019, 3, 28 ), "yyyy-mm-dd" )     ),
      ( "Date (2)",     FORMAT ( DATE ( 2019, 3, 28 ), "m/d/yy" )         ),
      ( "Date (Q)",     FORMAT ( DATE ( 2019, 3, 28 ), "\QQ yyyy" )       )
    }
    

    image

     

    💡 Exemplo 02:

    Usando FORMAT com strings de formato predefinidas para números.

    EVALUATE
    {
      ( "General Number",  FORMAT( 12345.67, "General Number" )  ),
      ( "Currency"      ,  FORMAT( 12345.67, "Currency"       )  ),
      ( "Fixed"         ,  FORMAT( 12345.67, "Fixed"          )  ),
      ( "Standard"      ,  FORMAT( 12345.67, "Standard"       )  ),
      ( "Percent"       ,  FORMAT( 12345.67, "Percent"        )  ),
      ( "Scientific"    ,  FORMAT( 12345.67, "Scientific"     )  ),
      ( "True/False"    ,  FORMAT( TRUE,     "True/False"     )  ),
      ( "On/Off"        ,  FORMAT( FALSE,    "On/Off"         )  ),
      ( "Yes/No"        ,  FORMAT( TRUE,     "Yes/No"         )  )
    }
    

    image

     

    💡 Exemplo 03:

    Quando o valor for BLANK, FORMAT retornará uma string vazia.

    EVALUATE
    {
      ( "General Number",  FORMAT ( BLANK (), "General Number" ) ),
      ( "Currency"      ,  FORMAT ( BLANK (), "Currency"       ) ),
      ( "Fixed"         ,  FORMAT ( BLANK (), "Fixed"          ) ),
      ( "Standard"      ,  FORMAT ( BLANK (), "Standard"       ) ),
      ( "Percent"       ,  FORMAT ( BLANK (), "Percent"        ) ),
      ( "Scientific"    ,  FORMAT ( BLANK (), "Scientific"     ) ),
      ( "True/False"    ,  FORMAT ( BLANK (), "True/False"     ) ),
      ( "On/Off"        ,  FORMAT ( BLANK (), "On/Off"         ) ),
      ( "Yes/No"        ,  FORMAT ( BLANK (), "Yes/No"         ) )
    }
    

    image

     

    💡 Exemplo 04:

    Usando seções personalizadas para valores positivos, negativos e zero.

    EVALUATE
    {
      ( "Positive",  FORMAT (  1980.126, "#,0.00" ) ),
      ( "Negative",  FORMAT ( -1980.1  , "#,0.00" ) ),
      ( "Zero",      FORMAT (     0    , "#,0.00" ) ),
      ( "Blank",     FORMAT ( BLANK () , "#,0.00" ) )
    }
     
    EVALUATE
    {
      ( "Positive",  FORMAT (  1980.126, "#,0.00;(#,0.00)" ) ),
      ( "Negative",  FORMAT ( -1980.1  , "#,0.00;(#,0.00)" ) ),
      ( "Zero",      FORMAT (     0    , "#,0.00;(#,0.00)" ) ),
      ( "Blank",     FORMAT ( BLANK () , "#,0.00;(#,0.00)" ) )
    }
     
    EVALUATE
    {
      ( "Positive",  FORMAT (  1980.12, "#,#.##;(#,#.##);-" ) ),
      ( "Negative",  FORMAT ( -1980.12, "#,#.##;(#,#.##);-" ) ),
      ( "Zero",      FORMAT (     0   , "#,#.##;(#,#.##);-" ) ),
      ( "Blank",     FORMAT ( BLANK (), "#,#.##;(#,#.##);-" ) )
    }
    

    image

     

    💡 Exemplo 05:

    Formatos predefinidos para Data e Hora.

    DEFINE
      VAR D  = DATE ( 2021, 1, 2 )
      VAR T  = TIME ( 15, 30, 0 )
      VAR DT = D + T
    EVALUATE
    {
      ( "General Date",  FORMAT ( DT, "General Date" ) ),
      ( "Long Date"   ,  FORMAT ( DT, "Long Date"    ) ),
      ( "Medium Date" ,  FORMAT ( DT, "Medium Date"  ) ),
      ( "Short Date"  ,  FORMAT ( DT, "Short Date"   ) ),
      ( "Long Time"   ,  FORMAT ( DT, "Long Time"    ) ),
      ( "Medium Time" ,  FORMAT ( DT, "Medium Time"  ) ),
      ( "Short Time"  ,  FORMAT ( DT, "Short Time"   ) )
    }
    

    image

     

    💡 Exemplo 06:

    Formatando datas e horas personalizadas.

    DEFINE
      VAR D  = DATE ( 2020, 1, 2 )
      VAR T  = TIME ( 15, 30, 0 )
      VAR DT = D + T
    EVALUATE
    {
      ( "dd/mm/yyyy"   ,  FORMAT ( DT, "dd/mm/yyyy" ) ),
      ( "hh:nn:ss"     ,  FORMAT ( DT, "hh:nn:ss"   ) ), -- "nn" for minutes
      ( "hh:mm:ss"     ,  FORMAT ( DT, "hh:mm:ss"   ) ), -- "mm" works too, if hh before
      ( "c (full)"     ,  FORMAT ( DT, "c"          ) ),
      ( "c (Date only)",  FORMAT ( D,  "c"          ) ),
      ( "c (Time only)",  FORMAT ( T,  "c"          ) )
    }
    

    image

     

    💡 Exemplo 07:

    Calculando a duração de eventos.

    DEFINE
      VAR StartEvent = DATE ( 2020, 1, 2 ) + TIME ( 15, 30, 0 )
      VAR EndEvent = DATE ( 2020, 1, 4 ) + TIME ( 6, 18, 42 )
      VAR DurationEvent = EndEvent - StartEvent
    EVALUATE
    {
      FORMAT ( INT ( DurationEvent ), "0:" ) & FORMAT ( DurationEvent, "hh:nn:ss" )
    }    
    

    image

     

    💡 Exemplo 08:

    Usando "m" para diferentes tipos de mês.

    DEFINE
      VAR D = DATE ( 2020, 1, 2 )
    EVALUATE
    {
      ( "m"      ,  FORMAT ( D, "m"      ) ),   -- 1 or 2 digits
      ( "mm"     ,  FORMAT ( D, "mm"     ) ),   -- always 2 digits
      ( "mmm"    ,  FORMAT ( D, "mmm"    ) ),   -- short day of month
      ( "mmmm"   ,  FORMAT ( D, "mmmm"   ) )    -- long day of month
    }
    

    image

     

    💡 Exemplo 09:

    Usando "d" para diferentes tipos de dia.

    DEFINE
      VAR D = DATE ( 2020, 1, 9 )
    EVALUATE
    {
      ( "d"      ,  FORMAT ( D, "d"      ) ),   -- 1 or 2 digits
      ( "dd"     ,  FORMAT ( D, "dd"     ) ),   -- always 2 digits
      ( "ddd"    ,  FORMAT ( D, "ddd"    ) ),   -- short day of week
      ( "dddd"   ,  FORMAT ( D, "dddd"   ) ),   -- long day of week
      ( "ddddd"  ,  FORMAT ( D, "ddddd"  ) ),   -- short date
      ( "dddddd" ,  FORMAT ( D, "dddddd" ) )    -- long date
    }    
    

    image

     

    💡 Exemplo 10:

    Formatando números e datas de acordo com a localidade.

    EVALUATE {
      FORMAT( dt"2020-12-15T12:30:59", BLANK(), "en-US" ),
      FORMAT( dt"2020-12-15T12:30:59", BLANK(), "en-GB" ), 
      FORMAT( dt"2020-12-15T12:30:59", "mm/dd/yyyy", "en-GB" ),
      FORMAT( dt"2020-12-15T12:30:59", "dd mmmm yyyy", "en-US" ),
      FORMAT( dt"2020-12-15T12:30:59", "dd mmmm yyyy", "pt-BR" ),
      FORMAT( dt"2020-12-15T12:30:59", "dd mmmm yyyy", "ru-RU" ),
      FORMAT( 1234.567, "#,0.00", "en-US" ), -- Use comma as thousand separator and dot as decimal separator
      FORMAT( 1234.567, "#,0.00", "de-DE" )  -- Use dot as thousand separator and comma as decimal separator
    }
    

    image

     

    💡 Exemplo 11:

    Usando formatação para grandes números.

    EVALUATE
    VAR BigNumber = 103456789102
    RETURN
      {
          FORMAT ( BigNumber, "$#,0" ),        -- Units
          FORMAT ( BigNumber, "$#,0,.0#K" ),   -- Thousand
          FORMAT ( BigNumber, "$#,0,,.0#M" ),  -- Million
          FORMAT ( BigNumber, "$#,0,,,.0#B" ), -- Billion
          FORMAT ( BigNumber, "$#,0,,,,.0#T" ) -- Trillion
      }
    

    image

     

    💡 Exemplo 12:

    Formatação dinâmica de valores grandes.

    DEFINE
      TABLE Numbers = { 103, 10345, 103456, 1034567, 103456789, 134897891, 103456789102, 103499789102, 1034567891023 }
      MEASURE Numbers[SkipThousands] =
          VAR CurrentNumber =
              SELECTEDVALUE ( Numbers[Value] )
          VAR LogRatio =
              IF ( CurrentNumber > 0, DIVIDE ( LOG ( CurrentNumber ), LOG ( 1000 ) ) )
          RETURN
              ROUNDDOWN ( DIVIDE ( LOG10 ( CurrentNumber ), 3 ), 0 )
      MEASURE Numbers[ValueFormatString] =
          SWITCH (
              [SkipThousands],
              0, "$#,0",       -- Integer number
              1, "$#,0,.0#K",  -- Thousand
              2, "$#,0,,.0#M", -- Million
              3, "$#,0,,,.0#B", -- Billion
              "$#,0,,,,.0#T"   -- Trillion
          )
    EVALUATE
    ADDCOLUMNS (
      Numbers,
      "Formatted Value", FORMAT ( Numbers[Value], [ValueFormatString] ),
      "Format String", [ValueFormatString]
    )
    

    image

     

    💡 Dicas Extras:

    • O argumento opcional LocaleName foi introduzido em 2022, permitindo que você adapte a formatação com base na cultura do usuário.
    • Para formatar durações que envolvem dias e horas, use duas funções FORMAT para lidar corretamente com ambos os tipos de dados.

    🚀 Aproveite todo o poder da função FORMAT no DAX e deixe seus relatórios mais claros, organizados e visualmente agradáveis!

     

    Link documentação de referencia: https://dax.guide/format/

    Vídeo de referência: https://youtu.be/1JSwrX3xAZE

    Compartilhe
    Comentários (0)