Pular para o conteúdo
officetuning.aiofficetuning.ai
TreinamentosConsultoriaBibliotecaFerramentasConteúdoPortfólio
Entrar
officetuning.aiofficetuning.ai

Treinamento, consultoria e mentoria para decidir, construir e aprender nas quatro frentes da marca.

AI · Data · Productivity · Dev · São Paulo
contato@officetuning.ai
TreinamentosPower BIExcelSQLPowerPointIA + ProdutividadeTodos os treinamentos
PortalConsultoriaBibliotecaPortfólioBackground BuilderDashboard CanvasConteúdo
InstitucionalPolítica de privacidadeInformações legais
© 2026 officetuning.ai · São Paulo
  1. Biblioteca
  2. Power Query (M)
  3. UDFs M
  4. fnNthWeekday

fnNthWeekday

MData e hora

Enésima ocorrência de um dia da semana num mês.

Sintaxe

M
fnNthWeekday(Ano as number, Mes as number, DiaDaSemana as number, N as number) as nullable date

Parâmetros

AnonumberObrigatório

Ano.

M
2025
MesnumberObrigatório

Mês, de 1 a 12.

M
1
DiaDaSemananumberObrigatório

0 = segunda ... 6 = domingo (numeração de Date.DayOfWeek(data, Day.Monday)).

M
0
NnumberObrigatório

Ocorrência desejada (1 = primeira).

M
3

Tipo de retorno

nullable date

Exemplos

M
fnNthWeekday(2025, 1, 0, 3)
// #date(2025, 1, 20)  3ª segunda-feira de janeiro

fnNthWeekday(2025, 2, 0, 5)
// null  (fevereiro/2025 tem 4 segundas)

Código completo

M
let
    fnNthWeekday = (Ano as number, Mes as number, DiaDaSemana as number, N as number) as nullable date =>
        let
            vPrimeiroDia = #date(Ano, Mes, 1),
            // Dias até o primeiro DiaDaSemana do mês (0 a 6); 0 = segunda ... 6 = domingo
            vDesloc = Number.Mod(DiaDaSemana - Date.DayOfWeek(vPrimeiroDia, Day.Monday) + 7, 7),
            vData = Date.AddDays(vPrimeiroDia, vDesloc + 7 * (N - 1))
        in
            // N inválido, dia fora de 0-6 ou ocorrência que cai no mês seguinte → null
            if N < 1 or not List.Contains({0 .. 6}, DiaDaSemana) or Date.Month(vData) <> Mes then null
            else vData,

    Documentacao = [
        Documentation.Name = "fnNthWeekday",
        Documentation.Description = "Enésima ocorrência de um dia da semana num mês.",
        Documentation.LongDescription = "DiaDaSemana vai de 0 (segunda) a 6 (domingo), a mesma numeração de Date.DayOfWeek(data, Day.Monday). Retorna null quando a ocorrência não existe no mês, quando N < 1 ou quando DiaDaSemana está fora de 0-6.",
        Documentation.Category = "Data e hora",
        Documentation.Author = "Paulo André Jesus",
        Documentation.Version = "1.1",
        Documentation.Examples = {
            [Description = "3ª segunda-feira de janeiro de 2025", Code = "fnNthWeekday(2025, 1, 0, 3)", Result = "#date(2025, 1, 20)"],
            [Description = "2ª sexta-feira de julho de 2024", Code = "fnNthWeekday(2024, 7, 4, 2)", Result = "#date(2024, 7, 12)"],
            [Description = "5ª segunda-feira de fevereiro de 2025 (não existe)", Code = "fnNthWeekday(2025, 2, 0, 5)", Result = "null"]
        }
    ]
in
    Value.ReplaceType(fnNthWeekday, Value.ReplaceMetadata(Value.Type(fnNthWeekday), Documentacao))

Observações

Atenção Day.Monday vale 1 (Day.Sunday = 0). A numeração 0–6 começando na segunda vem de Date.DayOfWeek(data, Day.Monday). No DAX, WEEKDAY(data, 2) numera segunda = 1: confira a base ao portar lógica. Retorna null quando a ocorrência não existe no mês, quando N < 1 ou quando DiaDaSemana está fora de 0–6.

Mais informações

Fonte
Paulo André Jesus — OfficeTuning
Versão
1.1
Referência
https://learn.microsoft.com/pt-br/powerquery-m/date-dayofweek
AnteriorfnLastWeekdayPróxima fnNuvemDePalavras
Biblioteca