🚀 DAX: Usando a Função FORMAT para Formatação de Valores 🚀
- #Power BI
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" ) )
}
💡 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" ) )
}
💡 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" ) )
}
💡 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 (), "#,#.##;(#,#.##);-" ) )
}
💡 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" ) )
}
💡 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" ) )
}
💡 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" )
}
💡 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
}
💡 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
}
💡 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
}
💡 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
}
💡 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]
)
💡 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