Linguagem

DAX

Itens reutilizáveis de DAX organizados por tipo de objeto e categoria/biblioteca. Extensão canônica .dax.

Itens
17
Categorias
2
Exibindo
17

Business

3

Business.Choosed

Retorna o valor único selecionado de uma coluna, ou um texto alternativo se houver mais de um valor no contexto de filtro. Uso típico: título dinâmico de cartão/página que reage à segmentação.

BásicoUDFv1.0.0
FUNCTION Business.Choosed =
    (
        ColumnToCheck: anyref,
        ResultFalse: string
    ) =>
    IF.EAGER (
        HASONEVALUE ( ColumnToCheck ),
        SELECTEDVALUE ( ColumnToCheck ),
        ResultFalse
    )
  • dax
  • udf
  • business
  • selecao
  • titulo-dinamico

Business.ConditionalFormat.Triangle

Converte um valor percentual de variação (ex.: Delta% AA) em um identificador de ícone de formatação condicional (triângulo cima/baixo/neutro). Retorna texto, não o glifo em si — alimenta uma coluna de formatação condicional ou mapeamento de ícone.

BásicoUDFv1.0.0
FUNCTION Business.ConditionalFormat.Triangle =
    (
        PercentValue: anyref
    ) =>
    SWITCH (
        TRUE (),
        PercentValue == BLANK (), BLANK (),
        PercentValue > 0, "TriangleHigh",
        PercentValue < 0, "TriangleLow",
        PercentValue = 0, "TriangleMedium"
    )
  • dax
  • udf
  • business
  • formatacao-condicional
  • kpi

Business.FormatWithLeadingZeros

Formata um número com zeros à esquerda, dado o número e a quantidade de caracteres desejada. Aplica ABS internamente.

BásicoUDFv1.0.0
FUNCTION Business.FormatWithLeadingZeros =
    (
        pNumero : INT64 VAL,
        pNumeroDeCaracteres : INT64 VAL
    ) =>
    VAR vNumero =
        ABS ( pNumero )
    VAR vNumeroDeCaracteres =
        MAX ( 1, ABS ( pNumeroDeCaracteres ) )
    RETURN
        FORMAT ( vNumero, REPT ( "0", vNumeroDeCaracteres ) )
  • dax
  • udf
  • business
  • formatacao
  • texto

DateTime

14

DateTime.Calendar

Gera uma tabela de datas completa e parametrizada — colunas de calendário gregoriano, semana, quinzena, ISO 8601, estação (fixo hemisfério sul) e calendário fiscal (rotulado pelo ano em que termina). Após criar a tabela, marque-a manualmente como Tabela de Datas no Power BI.

AvançadoUDFv1.0.0
FUNCTION DateTime.Calendar =
    (
        StartDate: scalar datetime val,
        EndDate: scalar datetime val,
        Locale: scalar string,
        FirstDay: scalar int64 val,
        FiscalYearStartMonth: scalar int64 val
    ) =>
    VAR Calendario = SELECTCOLUMNS ( CALENDAR ( StartDate, EndDate ), "Data Referência", [Date] )
    RETURN
        ADDCOLUMNS( Calendario,

            // Colunas de Base
            "Data (AAAAMMDD)", FORMAT ( [Data Referência], "YYYYMMDD" ), "Data (ddd dd/mm/aaaa)", FORMAT ( [Data Referência], "DDD DD/MM/YYYY", Locale ),
            "Ano", YEAR ( [Data Referência] ) ,
            "Semestre #", IF ( MONTH([Data Referência]) <= 6, 1, 2 ),
            "Semestre", "S" & IF ( MONTH([Data Referência]) <= 6, 1, 2 ),
            "Trimestre #", QUARTER([Data Referência]),
            "Trimestre", "T" & FORMAT ( [Data Referência], "Q" ),
            "Ano/Trimestre", FORMAT ( [Data Referência], "YYYY/Q" ),
            "Mês #", MONTH ( [Data Referência] ),
            "Mês", FORMAT ( [Data Referência], "MMMM", Locale ),
            "Mês (Abreviado)", FORMAT ( [Data Referência], "MMM", Locale ),
            "Ano/Mês", FORMAT (  [Data Referência], "YYYY/MM" ),
            "Ano/Mês (Abreviado)", FORMAT ( [Data Referência], "YYYY/mmm", Locale ),
            "Semana #", WEEKNUM ( [Data Referência], FirstDay ),
            "Semana", WEEKNUM ( [Data Referência], FirstDay ) & "ª semana",
            "Semana do Mês", 1 + WEEKNUM ( [Data Referência], FirstDay ) - WEEKNUM ( DATE ( YEAR ( [Data Referência] ), MONTH ( [Data Referência] ), 1 ), FirstDay ),
            "Quinzena #", IF ( DAY([Data Referência]) <= 15, 1, 2 ),
            "Quinzena", "Q" & IF( DAY([Data Referência]) <= 15, 1, 2 ),
            "Dia da Semana #", WEEKDAY ( [Data Referência], FirstDay ),
            "Dia da Semana", FORMAT ( [Data Referência], "dddd", Locale ),
            "Dia da Semana (Abreviado)", FORMAT ( [Data Referência], "ddd", Locale ),
            "Fim-de-Semana", FORMAT ( WEEKDAY ( [Data Referência], 2 ) >= 6, "Yes/No", Locale ),
            "Dia do Ano", DATEDIFF ( DATE ( YEAR ( [Data Referência]), 1, 1 ),  [Data Referência], DAY ) + 1,
            "Dia", DAY([Data Referência]),

            // Colunas de Estação
            "Estação #", SWITCH ( TRUE(), MONTH([Data Referência]) IN { 12, 01, 02 }, 2,
                                          MONTH([Data Referência]) IN { 03, 04, 05 }, 3,
                                          MONTH([Data Referência]) IN { 06, 07, 08 }, 4,
                                          MONTH([Data Referência]) IN { 09, 10, 11 }, 1 ),
            "Estação", SWITCH ( TRUE(), MONTH([Data Referência]) IN { 12, 01, 02 }, "☀️ Verão",
                                        MONTH([Data Referência]) IN { 03, 04, 05 }, "🍂 Outono",
                                        MONTH([Data Referência]) IN { 06, 07, 08 }, "❄️ Inverno",
                                        MONTH([Data Referência]) IN { 09, 10, 11  }, "🌺 Primavera" ),
            "Estação Cor", SWITCH ( TRUE(), MONTH([Data Referência]) IN { 12, 01, 02 }, "#FCD53F",
                                            MONTH([Data Referência]) IN { 03, 04, 05 }, "#E19747",
                                            MONTH([Data Referência]) IN { 06, 07, 08 }, "#00A6ED",
                                            MONTH([Data Referência]) IN { 09, 10, 11 }, "#EB349B" ),

            // Colunas de Limites de Período
            "Início do Mês", DATE ( YEAR ( [Data Referência] ), MONTH ( [Data Referência] ), 1 ),
            "Fim do Mês", EOMONTH ( [Data Referência], 0 ),
            "Início do Trimestre", DATE ( YEAR ( [Data Referência] ), ( QUARTER ( [Data Referência] ) - 1 ) * 3 + 1, 1),
            "Fim do Trimestre", EOMONTH ( DATE(YEAR([Data Referência]), ( QUARTER ( [Data Referência] ) - 1) * 3 + 1, 1 ), 2 ),
            "Início do Ano", DATE ( YEAR ( [Data Referência] ), 1, 1 ),
            "Fim do Ano", EOMONTH ( DATE ( YEAR ( [Data Referência] ), 12, 1), 0 ),

            // Colunas ISO
            "Semana ISO #", WEEKNUM ( [Data Referência], 21 ),
            "Ano ISO", YEAR ( [Data Referência] - ( WEEKDAY( [Data Referência], 2 ) - 4 ) ),
            "Ano-Semana ISO",
            VAR Quinta = [Data Referência] - (WEEKDAY( [Data Referência], 2 ) - 4)
            VAR vISOAno = YEAR ( Quinta )
            VAR vISOSem = WEEKNUM ( [Data Referência], 21 )
            RETURN
                vISOAno & "-" & RIGHT( "00" & vISOSem, 2 ),

            // Colunas Fiscais
            "Mês Fiscal #", MOD ( MONTH ( [Data Referência] ) - FiscalYearStartMonth + 12, 12) + 1,
            "Trimestre Fiscal #", ROUNDUP ( ( MOD ( MONTH ( [Data Referência] ) - FiscalYearStartMonth + 12, 12 ) + 1) / 3, 0 ),
            "Ano Fiscal Número", YEAR ( [Data Referência] ) + IF ( MONTH ( [Data Referência] ) >= FiscalYearStartMonth, 1, 0 ),
            "Ano Fiscal", VAR vFY = YEAR([Data Referência]) + IF ( MONTH ( [Data Referência] ) >= FiscalYearStartMonth, 1, 0 )
            RETURN
                "FY" & RIGHT ( "0" & MOD ( vFY, 100 ), 2 ),
            "Trimestre Fiscal", VAR vFY2 = YEAR ( [Data Referência]) + IF ( MONTH ( [Data Referência] ) >= FiscalYearStartMonth, 1, 0 )
            VAR vFQ = ROUNDUP ( ( MOD ( MONTH ( [Data Referência] ) - FiscalYearStartMonth + 12, 12 ) + 1) / 3, 0 )
            RETURN
                "FY" & RIGHT ( "0" & MOD( vFY2, 100 ), 2 ) & " Q" & vFQ,
            "Ano/Mês Fiscal",
            VAR vFY3 = YEAR ( [Data Referência] ) + IF ( MONTH ( [Data Referência] ) >= FiscalYearStartMonth, 1, 0 )
            VAR vFM = MOD ( MONTH ( [Data Referência] ) - FiscalYearStartMonth + 12, 12 ) + 1
            RETURN
                vFY3 & "/" & RIGHT ( "00" & vFM, 2 )
        )
  • dax
  • udf
  • datetime
  • calendario
  • fiscal
  • iso-8601

DateTime.Calendar.About

Autodocumentação da biblioteca DateTime — retorna nome, autor e assinatura da função principal DateTime.Calendar.

BásicoUDFv1.0.0
FUNCTION DateTime.Calendar.About = () =>
    VAR LB = UNICHAR(10)
    RETURN
        "📚 Biblioteca: DateTime" & LB &
        "🧑 Autor: Paulo André Jesus" & LB &
        "🧩 Funções:" & LB &
        "• DateTime.Calendar(StartDate, EndDate, Locale, FirstDay, FiscalYearStartMonth)" & LB & "⚠️ Após criar a tabela, marque-a como Tabela de Datas no Power BI." 
  • dax
  • udf
  • datetime
  • documentacao

DateTime.FirstDayOfYear

Retorna o primeiro dia do ano da data informada.

BásicoUDFv1.0.0
FUNCTION DateTime.FirstDayOfYear =
    (
        DateTime : datetime val
    ) =>
    DATE ( YEAR ( DateTime ), 1, 1 )
  • dax
  • udf
  • datetime
  • calendario

DateTime.FiscalMonth

Mês fiscal (1..12) relativo ao mês de início informado.

BásicoUDFv1.0.0
FUNCTION DateTime.FiscalMonth =
    (
        DateTime : datetime val ,
        StartMonth : int64 val
    ) =>
    MOD ( MONTH ( DateTime ) - StartMonth + 12, 12 ) + 1
  • dax
  • udf
  • datetime
  • fiscal

DateTime.FiscalYear

Ano fiscal (numérico) com base no mês de início informado — rotulado pelo ano em que termina.

BásicoUDFv1.0.0
FUNCTION DateTime.FiscalYear =
    (
        DateTime : datetime val ,
        StartMonth :int64 val
    ) =>
    VAR vYear = YEAR ( DateTime )
    RETURN
        IF ( MONTH ( DateTime ) >= StartMonth, vYear + 1, vYear )
  • dax
  • udf
  • datetime
  • fiscal

DateTime.Holidays.Carnival

Terça-feira de Carnaval — 47 dias antes da Páscoa.

IntermediárioUDFv1.0.0
FUNCTION DateTime.Holidays.Carnival =
    (
        YearNumber : INT64 VAL
    ) =>
    VAR vYear   = MIN ( 9999, MAX ( 1900, ABS ( YearNumber ) ) )
    VAR vEaster = DateTime.Holidays.EasterDate ( vYear )
    RETURN
        vEaster - 47
  • dax
  • udf
  • datetime
  • feriados
  • brasil

DateTime.Holidays.CorpusChristi

Corpus Christi — 60 dias após a Páscoa.

IntermediárioUDFv1.0.0
FUNCTION DateTime.Holidays.CorpusChristi =
    (
        YearNumber : INT64 VAL
    ) =>
    VAR vYear   = MIN ( 9999, MAX ( 1900, ABS ( YearNumber ) ) )
    VAR vEaster = DateTime.Holidays.EasterDate ( vYear )
    RETURN
        vEaster + 60
  • dax
  • udf
  • datetime
  • feriados
  • brasil

DateTime.Holidays.EasterDate

Data da Páscoa (calendário gregoriano) — algoritmo de Meeus/Jones/Butcher.

AvançadoUDFv1.0.0
FUNCTION DateTime.Holidays.EasterDate =
    (
        YearNumber : INT64 VAL
    ) =>
    VAR vYear  = MIN ( 9999, MAX ( 1900, ABS ( YearNumber ) ) )
    VAR vA     = MOD ( vYear, 19 )
    VAR vB     = QUOTIENT ( vYear, 100 )
    VAR vC     = MOD ( vYear, 100 )
    VAR vD     = QUOTIENT ( vB, 4 )
    VAR vE     = MOD ( vB, 4 )
    VAR vF     = QUOTIENT ( vB + 8, 25 )
    VAR vG     = QUOTIENT ( vB - vF + 1, 3 )
    VAR vH     = MOD ( 19 * vA + vB - vD - vG + 15, 30 )
    VAR vI     = QUOTIENT ( vC, 4 )
    VAR vK     = MOD ( vC, 4 )
    VAR vL     = MOD ( 32 + 2 * vE + 2 * vI - vH - vK, 7 )
    VAR vM     = QUOTIENT ( vA + 11 * vH + 22 * vL, 451 )
    VAR vMonth = QUOTIENT ( vH + vL - 7 * vM + 114, 31 )
    VAR vDay   = 1 + MOD ( vH + vL - 7 * vM + 114, 31 )
    RETURN
        DATE ( vYear, vMonth, vDay )
  • dax
  • udf
  • datetime
  • feriados
  • pascoa

DateTime.Holidays.GoodFriday

Sexta-feira Santa — 2 dias antes da Páscoa.

IntermediárioUDFv1.0.0
FUNCTION DateTime.Holidays.GoodFriday =
    (
        YearNumber : INT64 VAL
    ) =>
    VAR vYear   = MIN ( 9999, MAX ( 1900, ABS ( YearNumber ) ) )
    VAR vEaster = DateTime.Holidays.EasterDate ( vYear )
    RETURN
        vEaster - 2
  • dax
  • udf
  • datetime
  • feriados
  • brasil

DateTime.IsLeapYear

Indica se o ano informado é bissexto (calendário gregoriano).

BásicoUDFv1.0.0
FUNCTION DateTime.IsLeapYear =
    (
        YearNumber : int64 val
    ) =>
    MOD ( YearNumber, 400 ) = 0 || ( MOD ( YearNumber, 4 ) = 0 && MOD ( YearNumber, 100 ) <> 0 )
  • dax
  • udf
  • datetime
  • calendario

DateTime.ISOWeekNumber

Número da semana ISO-8601 (segunda=1; a semana 1 contém a primeira quinta-feira do ano).

IntermediárioUDFv1.0.0
FUNCTION DateTime.ISOWeekNumber =
    (
        DateTime : datetime val
    ) =>
    VAR vThursday = DateTime - WEEKDAY ( DateTime, 2 ) + 4
    RETURN
        INT ( DIVIDE ( vThursday - DATE ( YEAR ( vThursday ), 1, 1 ), 7 ) ) + 1
  • dax
  • udf
  • datetime
  • iso-8601

DateTime.IsWeekend

Indica se a data cai em fim de semana (sábado ou domingo).

BásicoUDFv1.0.0
FUNCTION DateTime.IsWeekend =
    (
        DateTime : datetime val
    ) =>
    VAR vWeekDay = WEEKDAY ( DateTime, 2 )   // seg=1 .. dom=7
    RETURN
        vWeekDay >= 6
  • dax
  • udf
  • datetime
  • calendario

DateTime.LastDayOfYear

Retorna o último dia do ano da data informada.

BásicoUDFv1.0.0
FUNCTION DateTime.LastDayOfYear =
    (
        DateTime : datetime val
    ) =>
    DATE ( YEAR ( DateTime ), 12, 31 )
  • dax
  • udf
  • datetime
  • calendario

DateTime.TotalTimeToStr

Converte um valor de tempo total (número serial) em string no formato HH:MM:SS.

BásicoUDFv1.0.0
FUNCTION DateTime.TotalTimeToStr =
    (
        DateTime :datetime val
    ) =>
    VAR Horas    = FORMAT ( INT ( DateTime * 24 ), "#00" )
    VAR Minutos  = FORMAT ( MINUTE ( DateTime ), "00" )
    VAR Segundos = FORMAT ( SECOND ( DateTime ), "00" )
    RETURN
        Horas & ":" & Minutos & ":" & Segundos
  • dax
  • udf
  • datetime
  • formatacao

Convenção de nomes — obrigatória

Medida / Coluna / Tabela Calculada

Nome de negócio, com espaços

Total de Vendas (ytd)

UDF

Publisher.Escopo.Função — PascalCase, publisher fixo OfficeTuning

OfficeTuning.DateLib.FiscalYear
Documentação embutida: UDF documentada com /// e blocos de metadados no cabeçalho.