Ir para conteúdo
  • 0

SafraAtual


Danilo Laercio Alves
Ir para solução Solucionado por Alex Pereira ,

Pergunta

  • Alunos

Bom dia, possuo uma tabela dCalendario criada em linguagem M. Nessa tabela tenho uma coluna que me retorna o AnoAtual e outra com o MesAtual. Estou trabalhando em um projeto onde o cliente analisa o MesAno por "Safra". Sempre inicia-se em abril de um ano e vai até março do ano seguinte. Criei essa coluna safra na minha dCalendario, porém preciso da mesma forma que tenho AnoAtual e MesAtual, ter a SafraAtual. Incomparáveis, poderiam me ajudar?

let

    MenorData = #date(2018,1,1),
    MaiorData = #date(2024,12,31),    
    
    DataInicio = Date.StartOfYear(MenorData),
    DataFim = Date.EndOfYear(MaiorData),
    Dias = Duration.Days(DataFim- DataInicio) +1,
    ListarDatas = List.Dates(DataInicio, Dias, #duration(1,0,0,0)),
    Tabela = #table(
        type table[
            Data = date,
            Ano = Int64.Type,
            NomeMes = text,
            MesAbre = text,
            MesAno = text,
            MesNum = number,
            AnoMesINT = number,
            InicioMes = date,
            Trimestre = Int64.Type,
            TrimestreAbreviado = text,
            Bimestre = text,
            Semestre = text,
            Semana = Int64.Type,
            DiaSemana = Int64.Type,
            NomeDia = text,
            Passado = logical,
            AnoAtual = text,
            MesAtual = text
        ],
        List.Transform(
            ListarDatas,
            each {
                _,
                Date.Year(_),
                Text.Proper( Date.MonthName(_)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)) & "-" & Text.End(Text.From(Date.Year(_)), 2),
                Date.Month(_),
                Date.Year(_) * 100 + Date.Month(_),
                Date.StartOfMonth(_),
                Date.QuarterOfYear(_),
                Text.From(Date.QuarterOfYear(_)) & "º Trim ",
                Text.From( Number.RoundUp( Date.Month(_)/2,0)) & "º Bim",
                Text.From( Number.RoundUp( Date.Month(_)/6,0)) & "º Sem",
                Date.WeekOfMonth(_),
                Date.DayOfWeek(_),
                Date.DayOfWeekName(_),
                if _ <= MaiorData then true else false,
                if Date.Year(MaiorData) = Date.Year(_) then "Ano Atual" else Text.From(Date.Year(_)),
                if Date.Year(MaiorData) = Date.Year(_) and Date.Month(MaiorData) = Date.Month(_) then "Mês Atual" else Text.Proper( Date.MonthName(_))
            }

        )
    ),
    #"Personalização Adicionada" = Table.AddColumn(Tabela, "Safra", each let
    mes = Date.Month([Data]),
    ano = Date.Year([Data]),
    inicio_safra = #date(if mes >= 4 then ano else ano - 1, 4, 1),
    fim_safra = #date(if mes >= 4 then ano + 1 else ano, 3, 31),
    safra_texto = Text.From(Date.Year(inicio_safra)) & "/" & Text.From(Date.Year(fim_safra))
in
    safra_texto),
    #"Coluna Personalizada Adicionada" = Table.AddColumn(#"Personalização Adicionada", "Personalizar", each Text.Combine({"Safra ", Text.Middle([Safra], 2, 3), Text.Middle([Safra], 7)}), type text),
    #"Colunas Removidas" = Table.RemoveColumns(#"Coluna Personalizada Adicionada",{"Safra"}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Colunas Removidas",{{"Personalizar", "Safra"}})
in
    #"Colunas Renomeadas"

 

 

image.png.626bd6085d03911538eadc8eedf5f303.png

dCalendario.pbix

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução
Em 31/05/2024 em 12:02, Danilo Laercio Alves disse:

Bom dia, possuo uma tabela dCalendario criada em linguagem M. Nessa tabela tenho uma coluna que me retorna o AnoAtual e outra com o MesAtual. Estou trabalhando em um projeto onde o cliente analisa o MesAno por "Safra". Sempre inicia-se em abril de um ano e vai até março do ano seguinte. Criei essa coluna safra na minha dCalendario, porém preciso da mesma forma que tenho AnoAtual e MesAtual, ter a SafraAtual. Incomparáveis, poderiam me ajudar?

let

    MenorData = #date(2018,1,1),
    MaiorData = #date(2024,12,31),    
    
    DataInicio = Date.StartOfYear(MenorData),
    DataFim = Date.EndOfYear(MaiorData),
    Dias = Duration.Days(DataFim- DataInicio) +1,
    ListarDatas = List.Dates(DataInicio, Dias, #duration(1,0,0,0)),
    Tabela = #table(
        type table[
            Data = date,
            Ano = Int64.Type,
            NomeMes = text,
            MesAbre = text,
            MesAno = text,
            MesNum = number,
            AnoMesINT = number,
            InicioMes = date,
            Trimestre = Int64.Type,
            TrimestreAbreviado = text,
            Bimestre = text,
            Semestre = text,
            Semana = Int64.Type,
            DiaSemana = Int64.Type,
            NomeDia = text,
            Passado = logical,
            AnoAtual = text,
            MesAtual = text
        ],
        List.Transform(
            ListarDatas,
            each {
                _,
                Date.Year(_),
                Text.Proper( Date.MonthName(_)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)) & "-" & Text.End(Text.From(Date.Year(_)), 2),
                Date.Month(_),
                Date.Year(_) * 100 + Date.Month(_),
                Date.StartOfMonth(_),
                Date.QuarterOfYear(_),
                Text.From(Date.QuarterOfYear(_)) & "º Trim ",
                Text.From( Number.RoundUp( Date.Month(_)/2,0)) & "º Bim",
                Text.From( Number.RoundUp( Date.Month(_)/6,0)) & "º Sem",
                Date.WeekOfMonth(_),
                Date.DayOfWeek(_),
                Date.DayOfWeekName(_),
                if _ <= MaiorData then true else false,
                if Date.Year(MaiorData) = Date.Year(_) then "Ano Atual" else Text.From(Date.Year(_)),
                if Date.Year(MaiorData) = Date.Year(_) and Date.Month(MaiorData) = Date.Month(_) then "Mês Atual" else Text.Proper( Date.MonthName(_))
            }

        )
    ),
    #"Personalização Adicionada" = Table.AddColumn(Tabela, "Safra", each let
    mes = Date.Month([Data]),
    ano = Date.Year([Data]),
    inicio_safra = #date(if mes >= 4 then ano else ano - 1, 4, 1),
    fim_safra = #date(if mes >= 4 then ano + 1 else ano, 3, 31),
    safra_texto = Text.From(Date.Year(inicio_safra)) & "/" & Text.From(Date.Year(fim_safra))
in
    safra_texto),
    #"Coluna Personalizada Adicionada" = Table.AddColumn(#"Personalização Adicionada", "Personalizar", each Text.Combine({"Safra ", Text.Middle([Safra], 2, 3), Text.Middle([Safra], 7)}), type text),
    #"Colunas Removidas" = Table.RemoveColumns(#"Coluna Personalizada Adicionada",{"Safra"}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Colunas Removidas",{{"Personalizar", "Safra"}})
in
    #"Colunas Renomeadas"

 

 

image.png.626bd6085d03911538eadc8eedf5f303.png

dCalendario.pbix 120.04 kB · 0 downloads

Veja se esse codigo te atende:

 

let
    MenorData = #date(2018,1,1),
    MaiorData = #date(2024,12,31),    
    
    DataInicio = Date.StartOfYear(MenorData),
    DataFim = Date.EndOfYear(MaiorData),
    Dias = Duration.Days(DataFim - DataInicio) + 1,
    ListarDatas = List.Dates(DataInicio, Dias, #duration(1,0,0,0)),
    Tabela = #table(
        type table[
            Data = date,
            Ano = Int64.Type,
            NomeMes = text,
            MesAbre = text,
            MesAno = text,
            MesNum = number,
            AnoMesINT = number,
            InicioMes = date,
            Trimestre = Int64.Type,
            TrimestreAbreviado = text,
            Bimestre = text,
            Semestre = text,
            Semana = Int64.Type,
            DiaSemana = Int64.Type,
            NomeDia = text,
            Passado = logical,
            AnoAtual = text,
            MesAtual = text
        ],
        List.Transform(
            ListarDatas,
            each {
                _,
                Date.Year(_),
                Text.Proper(Date.MonthName(_)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)),
                Text.Proper(Text.Start(Date.MonthName(_), 3)) & "-" & Text.End(Text.From(Date.Year(_)), 2),
                Date.Month(_),
                Date.Year(_) * 100 + Date.Month(_),
                Date.StartOfMonth(_),
                Date.QuarterOfYear(_),
                Text.From(Date.QuarterOfYear(_)) & "º Trim ",
                Text.From(Number.RoundUp(Date.Month(_) / 2, 0)) & "º Bim",
                Text.From(Number.RoundUp(Date.Month(_) / 6, 0)) & "º Sem",
                Date.WeekOfMonth(_),
                Date.DayOfWeek(_),
                Date.DayOfWeekName(_),
                if _ <= MaiorData then true else false,
                if Date.Year(DateTime.LocalNow()) = Date.Year(_) then "Ano Atual" else Text.From(Date.Year(_)),
                if Date.Year(DateTime.LocalNow()) = Date.Year(_) and Date.Month(DateTime.LocalNow()) = Date.Month(_) then "Mês Atual" else Text.Proper(Date.MonthName(_))
            }
        )
    ),
    #"Personalização Adicionada" = Table.AddColumn(Tabela, "Safra", each let
        mes = Date.Month([Data]),
        ano = Date.Year([Data]),
        inicio_safra = #date(if mes >= 4 then ano else ano - 1, 4, 1),
        fim_safra = #date(if mes >= 4 then ano + 1 else ano, 3, 31),
        safra_texto = Text.From(Date.Year(inicio_safra)) & "/" & Text.From(Date.Year(fim_safra))
    in
        safra_texto),
    #"Coluna Personalizada Adicionada" = Table.AddColumn(#"Personalização Adicionada", "Personalizar", each Text.Combine({"Safra ", Text.Middle([Safra], 2, 3), Text.Middle([Safra], 7)}), type text),
    #"Colunas Removidas" = Table.RemoveColumns(#"Coluna Personalizada Adicionada", {"Safra"}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Colunas Removidas", {{"Personalizar", "Safra"}}),

    // Adicionando coluna SafraAtual baseada na data atual do sistema
    DataAtual = DateTime.LocalNow(),
    MesAtual = Date.Month(DataAtual),
    AnoAtual = Date.Year(DataAtual),
    SafraAtualTexto = if MesAtual >= 4 then  Text.From(AnoAtual) & "/" & Text.From(AnoAtual + 1) else Text.From(AnoAtual - 1) & "/" & Text.From(AnoAtual),
    SafraAtualTextoCorrigido = "Safra " & Text.Middle(SafraAtualTexto,2,3) & Text.Middle(SafraAtualTexto, 7),
    #"Adicionando SafraAtual" = Table.AddColumn(#"Colunas Renomeadas", "SafraAtual", each if [Safra] = SafraAtualTextoCorrigido then "Safra Atual" else [Safra])
in
    #"Adicionando SafraAtual"

 

  • Like 1
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...