Ir para conteúdo
  • 0

CRIAR UM COLUNA PARA DEFINIR A SEMANA POR ORDEM


BI Milgran Granitos

Pergunta

  • Alunos

Boa tarde,

Na empresa onde trabalho tenho um dash que fica rodando na TV no salão com as metas dos vendedores, onde conforme eles vão atigindo a meta é criado o rank etc, essa meta é semanal então a semana começa no SABADO e vai até a SEXTA-FEIRA. No dash é exibido da seguinte forma:

SEMANA 1
(data do sabado até a sexta feira

Conforme vai mudando a semana vou atualizando manualmente para SEMANA 2, 3, 4, e 5. Porém é chato todo sabado em casa ter que parar um tempo para fazer isso apesar de ser simples.

Comecei a tentar automátizar isso mas não consigo. Pelo power query já defini algumas colunas na tabela dcalendario para ajudar mas falta essa parte da semana.

image.png.2caefec192053d1975b0fa6ef323d6b2.png

Nesse print tentei usar coluna de exemplo, mas ela bagunça nessa parte da semana 5 onde não pega todos dias como semana 5

image.png.938281244f7cf20aff16f6c9f6788943.png

Se tento alterar pode ver que ele some em cima as células.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
  • Alunos

Veja se esse código resolve. Fiz para o ano de 2024, acumulando a semana do ano com a função 

Date.WeekOfYear([Data], Day.Saturday)

Veja o código da dCalendario abaixo:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaSemanaAno = Table.AddColumn(InsereColunaDia, "Semana_Ano", each Date.WeekOfYear([Data], Day.Saturday), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaSemanaAno, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text)
in
    InsereColunaMesAnoNome

 

20240414_SemanaAnoIniciandoSabado.pbix

Editado por Bruno Abdalla de Souza
Anexar arquivo
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
13 horas atrás, Bruno Abdalla de Souza disse:

Veja se esse código resolve. Fiz para o ano de 2024, acumulando a semana do ano com a função 

Date.WeekOfYear([Data], Day.Saturday)

Veja o código da dCalendario abaixo:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaSemanaAno = Table.AddColumn(InsereColunaDia, "Semana_Ano", each Date.WeekOfYear([Data], Day.Saturday), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaSemanaAno, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text)
in
    InsereColunaMesAnoNome

 

20240414_SemanaAnoIniciandoSabado.pbix 28.42 kB · 0 downloads

Cara ficou top,
Porém faltou eu explicar que eu não queria a semana corrida  como fez 1,2,3,4,5,6,7,8 etc... Perdão por não ter sido mais claro!

Eu preciso que ela resete, por exemplo:

Janeiro teve 5 semanas então seria 1,2,3,4,5
Fevereiro teve 4 semanas então seria 1,2,3,4

Ai a cada mês preciso resetar para semana 1

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
21 horas atrás, Bruno Abdalla de Souza disse:

Substitua 

Date.WeekOfYear([Data], Day.Saturday)

por 

Date.WeekOfMonth([Data], Day.Saturday)

 

Dessa forma voltamos a estaca zero rsrs

image.png.37aa9b389cb028b8c395ab2c5cfe538c.png

 

Esse é o meu problema, para metas aqui na empresa considera-se a semana iniciando no Sabado e finalizando na Sexta, dessa forma quando o mês termina na terça ou na quarta como dia 30 ou 31 por exemplo ainda se considera a semana como do mês anterior.

Como nesse exemplo ai do print dia 31 de janeiro deu numa quarta feira, mas como a meta vai até na sexta-feira a semana 5 deveria ser nos dias 01 02 de Fevereiro também.

Porém não existe parâmetro para isso pelo que estou vendo! Acho que não terá como resolver!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Dá para resolver sim. Imagino a seguinte regra 

1) verificar qual é o primeiro sábado do mês 

2) se um determinado dia for menor que o primeiro sábado do mês,  a semana será igual ao do último dia do mês anterior,  caso contrário será o dia da semana (se sábado formo primeiro dia do mês) ou.o dia semana menos um (se o sábado não for o primeiro dia do mês).

 

Quando eu tiver um tempo eu tento implementar e te passo. 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Veja se isso resolve:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaDia, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text),
    InsereColunaDiaSemana = Table.AddColumn(InsereColunaMesAnoNome, "DiaSemana", each Date.DayOfWeek([Data], Day.Saturday), type number),
    InsereColunaSemanaMes = 
        Table.AddColumn(
            InsereColunaDiaSemana, 
            "Semana_Mes", 
            each 
                let
                    vAnoMesNum = [AnoMes_Num],
                    vData = [Data],
                    vPrimeiroDiaMes = Date.StartOfMonth(vData),
                    vDiaSemanaPrimeiroDiaMes = Date.DayOfWeek(vPrimeiroDiaMes, Day.Saturday),
                    vPrimeiroSabado = Date.AddDays(vPrimeiroDiaMes, if vDiaSemanaPrimeiroDiaMes = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMes),
                    vUltimoDiaMesAnterior = Date.AddDays(vPrimeiroDiaMes, -1),
                    vPrimeiroDiaMesAnterior = Date.StartOfMonth(vUltimoDiaMesAnterior),
                    vDiaSemanaPrimeiroDiaMesAnterior = Date.DayOfWeek(vPrimeiroDiaMesAnterior, Day.Saturday),
                    vPrimeiroSabadoMesAnterior = Date.AddDays(vPrimeiroDiaMesAnterior, if vDiaSemanaPrimeiroDiaMesAnterior = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMesAnterior),
                    vSemanaMesUltimoDiaMesAnterior = 
                        if vPrimeiroDiaMesAnterior = vPrimeiroSabadoMesAnterior then
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday)
                        else
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday) - 1,
                    vResultado = 
                        if vPrimeiroDiaMes = vPrimeiroSabado then
                            Date.WeekOfMonth([Data], Day.Saturday)
                        else
                            if [Data] < vPrimeiroSabado then
                                vSemanaMesUltimoDiaMesAnterior
                            else
                                Date.WeekOfMonth([Data], Day.Saturday) - 1
                in
                    vResultado, 
            type date
        )
in
    InsereColunaSemanaMes

 

20240417_SemanaMesIniciandoSabado.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
21 horas atrás, Bruno Abdalla de Souza disse:

Veja se isso resolve:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaDia, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text),
    InsereColunaDiaSemana = Table.AddColumn(InsereColunaMesAnoNome, "DiaSemana", each Date.DayOfWeek([Data], Day.Saturday), type number),
    InsereColunaSemanaMes = 
        Table.AddColumn(
            InsereColunaDiaSemana, 
            "Semana_Mes", 
            each 
                let
                    vAnoMesNum = [AnoMes_Num],
                    vData = [Data],
                    vPrimeiroDiaMes = Date.StartOfMonth(vData),
                    vDiaSemanaPrimeiroDiaMes = Date.DayOfWeek(vPrimeiroDiaMes, Day.Saturday),
                    vPrimeiroSabado = Date.AddDays(vPrimeiroDiaMes, if vDiaSemanaPrimeiroDiaMes = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMes),
                    vUltimoDiaMesAnterior = Date.AddDays(vPrimeiroDiaMes, -1),
                    vPrimeiroDiaMesAnterior = Date.StartOfMonth(vUltimoDiaMesAnterior),
                    vDiaSemanaPrimeiroDiaMesAnterior = Date.DayOfWeek(vPrimeiroDiaMesAnterior, Day.Saturday),
                    vPrimeiroSabadoMesAnterior = Date.AddDays(vPrimeiroDiaMesAnterior, if vDiaSemanaPrimeiroDiaMesAnterior = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMesAnterior),
                    vSemanaMesUltimoDiaMesAnterior = 
                        if vPrimeiroDiaMesAnterior = vPrimeiroSabadoMesAnterior then
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday)
                        else
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday) - 1,
                    vResultado = 
                        if vPrimeiroDiaMes = vPrimeiroSabado then
                            Date.WeekOfMonth([Data], Day.Saturday)
                        else
                            if [Data] < vPrimeiroSabado then
                                vSemanaMesUltimoDiaMesAnterior
                            else
                                Date.WeekOfMonth([Data], Day.Saturday) - 1
                in
                    vResultado, 
            type date
        )
in
    InsereColunaSemanaMes

 

20240417_SemanaMesIniciandoSabado.pbix 32.59 kB · 1 download

Bom dia,

Agora que consegui baixar e analisar, aparentemente ficou correto em relação a semana começar no sábado e fechar na sexta.

Único detalhe é esse:

image.png.b0bccc2482d817f792795661b5717c1f.png

A primeira semana de janeiro começou como SEMANA 5, se ele começar como SEMANA 1 pelo que entendi vai corrigir as semanas restante e vai ficar correto.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
1 hora atrás, Bruno Abdalla de Souza disse:

Se o ano virar e não começar no sábado,  mesmo assim os.dias antes de sábado serão a semana 1? Tinha entendido que seria igual a última semana do mês anterior,  mesmo sendo do ano anterior. 

Hm entendi, é o detalhe que entrei mês passado na empresa, não sei informar como foi em janeiro em relação a isso.

Mas eu poderia mudar a sua data inicial para 01/04/2024? Para começar desse mês pra frente.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
5 minutos atrás, Bruno Abdalla de Souza disse:

Sim, sempre vai pegar do mês anterior. Se quiser que o primeiro mês sempre comece com 1, tenho que alterar um pouco a lógica 

No caso, pra tentar resolver talvez pra esse ano, será que daria pra colocar a primeira semana começando como Semana 1. Que ai como pensei deve corrigir as semanas agora de abril.

Para 2025 vou ter que esperar chegar lá e ver como os gestores tratam essas datas inicio de ano.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Veja agora:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaDia, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text),
    InsereColunaDiaSemana = Table.AddColumn(InsereColunaMesAnoNome, "DiaSemana", each Date.DayOfWeek([Data], Day.Saturday), type number),
    InsereColunaSemanaMes = 
        Table.AddColumn(
            InsereColunaDiaSemana, 
            "Semana_Mes", 
            each 
                let
                    vAnoMesNum = [AnoMes_Num],
                    vData = [Data],
                    vPrimeiroDiaMes = Date.StartOfMonth(vData),
                    vDiaSemanaPrimeiroDiaMes = Date.DayOfWeek(vPrimeiroDiaMes, Day.Saturday),
                    vPrimeiroSabado = Date.AddDays(vPrimeiroDiaMes, if vDiaSemanaPrimeiroDiaMes = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMes),
                    vUltimoDiaMesAnterior = Date.AddDays(vPrimeiroDiaMes, -1),
                    vPrimeiroDiaMesAnterior = Date.StartOfMonth(vUltimoDiaMesAnterior),
                    vDiaSemanaPrimeiroDiaMesAnterior = Date.DayOfWeek(vPrimeiroDiaMesAnterior, Day.Saturday),
                    vPrimeiroSabadoMesAnterior = Date.AddDays(vPrimeiroDiaMesAnterior, if vDiaSemanaPrimeiroDiaMesAnterior = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMesAnterior),
                    vNumMesAtual = [Mes_Num], 
                    vSemanaMesUltimoDiaMesAnterior = 
                        if vPrimeiroDiaMesAnterior = vPrimeiroSabadoMesAnterior then
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday)
                        else
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday) - 1,
                    vResultado = 
                        if vPrimeiroDiaMes = vPrimeiroSabado then
                            Date.WeekOfMonth([Data], Day.Saturday)
                        else
                            if [Data] < vPrimeiroSabado then
                                if vNumMesAtual = 1 then
                                    1
                                else
                                    vSemanaMesUltimoDiaMesAnterior
                            else
                                if vNumMesAtual = 1 then
                                    Date.WeekOfMonth([Data], Day.Saturday)
                                else
                                    Date.WeekOfMonth([Data], Day.Saturday) - 1
                in
                    vResultado, 
            type number
        )
in
    InsereColunaSemanaMes

 

20240419_SemanaMesIniciandoSabado.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 19/04/2024 em 00:20, Bruno Abdalla de Souza disse:

Veja agora:

let
    pDataIni = #date(2024,1,1),
    pDataFim = #date(2024,12,31),
    ListaDatas = List.Dates(pDataIni, Number.From(pDataFim-pDataIni)+1,#duration(1,0,0,0)),
    ConverteEmTabela = Table.FromList(ListaDatas, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenomeiaColunaData = Table.RenameColumns(ConverteEmTabela,{{"Column1", "Data"}}),
    AlteraTipoData = Table.TransformColumnTypes(RenomeiaColunaData,{{"Data", type date}}),
    InsereColunaAno = Table.AddColumn(AlteraTipoData, "Ano", each Date.Year([Data]), Int64.Type),
    InsereColunaMesNum = Table.AddColumn(InsereColunaAno, "Mes_Num", each Date.Month([Data]), Int64.Type),
    InserveColunaMesNomeCompleto = Table.AddColumn(InsereColunaMesNum, "Mes_Nome_Completo", each Text.Proper(Date.MonthName([Data])), type text),
    InsereColunaMesNomeAbreviado = Table.AddColumn(InserveColunaMesNomeCompleto, "Mes_Nome_Abreviado", each Text.Start([Mes_Nome_Completo], 3), type text),
    InsereColunaAnoMesNum = Table.AddColumn(InsereColunaMesNomeAbreviado, "AnoMes_Num", each [Ano]*100+[Mes_Num], type number),
    InsereColunaTrimestre = Table.AddColumn(InsereColunaAnoMesNum, "Trimestre", each Text.From(Date.QuarterOfYear([Data])) & "º Tri", type text),
    InsereColunaSemestre = Table.AddColumn(InsereColunaTrimestre, "Semestre", each Text.From(Number.IntegerDivide([Mes_Num],6)+1) & "º Sem", type text),
    InsereColunaDia = Table.AddColumn(InsereColunaSemestre, "Dia", each Date.Day([Data]), Int64.Type),
    InsereColunaMesAnoNome = Table.AddColumn(InsereColunaDia, "MesAno_Nome", each Text.Combine({[Mes_Nome_Abreviado], Text.From([Ano], "pt-BR")}, "-"), type text),
    InsereColunaDiaSemana = Table.AddColumn(InsereColunaMesAnoNome, "DiaSemana", each Date.DayOfWeek([Data], Day.Saturday), type number),
    InsereColunaSemanaMes = 
        Table.AddColumn(
            InsereColunaDiaSemana, 
            "Semana_Mes", 
            each 
                let
                    vAnoMesNum = [AnoMes_Num],
                    vData = [Data],
                    vPrimeiroDiaMes = Date.StartOfMonth(vData),
                    vDiaSemanaPrimeiroDiaMes = Date.DayOfWeek(vPrimeiroDiaMes, Day.Saturday),
                    vPrimeiroSabado = Date.AddDays(vPrimeiroDiaMes, if vDiaSemanaPrimeiroDiaMes = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMes),
                    vUltimoDiaMesAnterior = Date.AddDays(vPrimeiroDiaMes, -1),
                    vPrimeiroDiaMesAnterior = Date.StartOfMonth(vUltimoDiaMesAnterior),
                    vDiaSemanaPrimeiroDiaMesAnterior = Date.DayOfWeek(vPrimeiroDiaMesAnterior, Day.Saturday),
                    vPrimeiroSabadoMesAnterior = Date.AddDays(vPrimeiroDiaMesAnterior, if vDiaSemanaPrimeiroDiaMesAnterior = 0 then 0 else 7 - vDiaSemanaPrimeiroDiaMesAnterior),
                    vNumMesAtual = [Mes_Num], 
                    vSemanaMesUltimoDiaMesAnterior = 
                        if vPrimeiroDiaMesAnterior = vPrimeiroSabadoMesAnterior then
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday)
                        else
                            Date.WeekOfMonth(vUltimoDiaMesAnterior, Day.Saturday) - 1,
                    vResultado = 
                        if vPrimeiroDiaMes = vPrimeiroSabado then
                            Date.WeekOfMonth([Data], Day.Saturday)
                        else
                            if [Data] < vPrimeiroSabado then
                                if vNumMesAtual = 1 then
                                    1
                                else
                                    vSemanaMesUltimoDiaMesAnterior
                            else
                                if vNumMesAtual = 1 then
                                    Date.WeekOfMonth([Data], Day.Saturday)
                                else
                                    Date.WeekOfMonth([Data], Day.Saturday) - 1
                in
                    vResultado, 
            type number
        )
in
    InsereColunaSemanaMes

 

20240419_SemanaMesIniciandoSabado.pbix 34.23 kB · 1 download

Não deu certo!
Desculpe a demora, estou resolvendo umas outras pendências mais prioritárias.

image.png.f0b8b2aee045780596109788bce5cfc9.png

Esse print é a sequencia de como vai terminar esse mês e dos dois próximos meses pra você ter uma ideia.

Se o dia 30 ou 31 der na terça feira em diante ai eles considerem como semana 5, por exemplo como esse mês de abril. 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Ainda não entendi. 

31/03 é um domingo.  Porque ele ficou como semana 1?

Ainda não entendi a regra.  Pense em cada caso, ou seja, se.l o mês terminar na segunda,  terça quarta,  etc, qual o comportamento da contagem de semanas?

Tente definir por escrito qual a regra,  como eu tentei fazer na mensagem anterior. 

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

31/03 ficou como semana 1 por que a semana no meu caso começa no Sábado lembra. Então a primeira semana começou 30/03, igual no print que te mandei do excel com as datas de cada semana até junho como exemplo.

Em abril foi considerado 5 semanas, porque?

Porque a nossa semana começa no sábado, então teremos

27/04 - SABADO

28/04 - DOMINGO

29/04 - SEGUNDA-FEIRA

30/04 - TERÇA-FEIRA

Contendo maior parte dos dias da semana 4 de 7 dias.

Sendo assim se o mês terminasse na SEGUNDA-FEIRA seria a menor parte 3 de 7 dias, então o mês de abril não seria contabilizado para nós como 5 semanas e sim como 4 semanas. Iniciando assim SEMANA 1 para maio.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Vamos à regra:

1) Se o mês terminar no sábado,  domingo ou segunda,  os últimos dias deste mês serão considerados como parte da semana 1 do mês seguinte. 

2) Se o mês x terminar na terça,  quarta,  quinta ou sexta, os últimos dias deste mês x e o início do mês seguinte y (caso seja antes de sábado) serão parte da última semana do mês x.

 

É esta a regra?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
13 horas atrás, Bruno Abdalla de Souza disse:

Vamos à regra:

1) Se o mês terminar no sábado,  domingo ou segunda,  os últimos dias deste mês serão considerados como parte da semana 1 do mês seguinte. 

2) Se o mês x terminar na terça,  quarta,  quinta ou sexta, os últimos dias deste mês x e o início do mês seguinte y (caso seja antes de sábado) serão parte da última semana do mês x.

 

É esta a regra?

Isso, correto!

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...