Ir para conteúdo
  • 0

Criar tabela de dia com Horas


itano.souza
Ir para solução Solucionado por Douglas Nascimento ,

Pergunta

  • Membros

Caros amigos (a), preciso criar uma tabela me traga Horas Calendários, ou seja às horas disponível no dia.

Ex.: 

****************************

*        Dia     |   Horas              *

*         1       |    24:00:00         *

*        2        |    24:00:00         *

*****************************

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
  • Membros
  • Solução
3 horas atrás, itano.souza disse:

Caros amigos (a), preciso criar uma tabela me traga Horas Calendários, ou seja às horas disponível no dia.

Ex.: 

****************************

*        Dia     |   Horas              *

*         1       |    24:00:00         *

*        2        |    24:00:00         *

*****************************

Você poderia criar uma tab dim_tempo aonde tem as horas e outra dim_calendario onde tem os dias e relacionar as duas na sua fato acredito que ficaria melhor 🙂 a seguir deixo um codigo M para criar uma tab dim_tempo veja se ajuda:

let
    Lista = {0..86399},
    ConverteParaTabela = Table.FromList(Lista, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    AlteraTipo = Table.TransformColumnTypes(ConverteParaTabela,{{"Column1", Int64.Type}}),
    AlteraNomeCol = Table.RenameColumns(AlteraTipo,{{"Column1", "Segundo"}}),
    ColDuracao = Table.AddColumn(AlteraNomeCol,"Duração", each #duration(0,0,0,[Segundo]), type duration),
    ColHora = Table.AddColumn(ColDuracao, "Hora", each #time(Duration.Hours([Duração]),Duration.Minutes([Duração]),Duration.Seconds([Duração])), type time),
    RemoveCols = Table.RemoveColumns(ColHora,{"Duração", "Segundo"}),
    ColHoraNum = Table.AddColumn(RemoveCols, "Hora Num", each Time.Hour([Hora]), Int64.Type),
    ColMinutoNum = Table.AddColumn(ColHoraNum, "Minuto Num", each Time.Minute([Hora]), Int64.Type),
    ColSegundoNum = Table.AddColumn(ColMinutoNum, "Segundo Num", each Time.Second([Hora]), Int64.Type),
    ColAMPM = Table.AddColumn(ColSegundoNum,"AMPM", each if [Hora Num] < 12 then "AM" else "PM", type text),
    ColHoraAMPM = Table.AddColumn(ColAMPM, "Hora AMPM", each 
        if [Hora Num] = 0 then "12 AM"
        else if [Hora Num] >= 1 and [Hora Num] <= 11 then Number.ToText([Hora Num]) & " AM" 
        else if [Hora Num] = 12 then "12 PM"
        else if [Hora Num] >= 13 then Number.ToText([Hora Num] - 12) & " PM"  
        else "Unknown", type text),
    ColPeriodo = 
        Table.AddColumn(ColHoraAMPM, "Período", each 
            if        [Hora Num] >= 0 and [Hora Num] <= 5 then "MADRUGADA"
            else if   [Hora Num] >= 6 and [Hora Num] <= 11 then "MANHÃ"
            else if   [Hora Num] >= 12 and [Hora Num] <= 17  then "TARDE"
            else if   [Hora Num] >= 18 and [Hora Num] <= 23 then "NOITE"
            else "Unknown", type text
            ),
    ColPeriodoOrdem = 
        Table.AddColumn(ColPeriodo, "Período Ordem", each 
            if        [Hora Num] >= 0 and [Hora Num] <= 5 then 1
            else if   [Hora Num] >= 6 and [Hora Num] <= 11 then 2
            else if   [Hora Num] >= 12 and [Hora Num] <= 17  then 3
            else if   [Hora Num] >= 18 and [Hora Num] <= 23 then 4
            else 5, Int64.Type
        )
in
    ColPeriodoOrdem

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
Em 15/11/2022 em 00:36, Douglas Nascimento disse:

Você poderia criar uma tab dim_tempo aonde tem as horas e outra dim_calendario onde tem os dias e relacionar as duas na sua fato acredito que ficaria melhor 🙂 a seguir deixo um codigo M para criar uma tab dim_tempo veja se ajuda:

let
    Lista = {0..86399},
    ConverteParaTabela = Table.FromList(Lista, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    AlteraTipo = Table.TransformColumnTypes(ConverteParaTabela,{{"Column1", Int64.Type}}),
    AlteraNomeCol = Table.RenameColumns(AlteraTipo,{{"Column1", "Segundo"}}),
    ColDuracao = Table.AddColumn(AlteraNomeCol,"Duração", each #duration(0,0,0,[Segundo]), type duration),
    ColHora = Table.AddColumn(ColDuracao, "Hora", each #time(Duration.Hours([Duração]),Duration.Minutes([Duração]),Duration.Seconds([Duração])), type time),
    RemoveCols = Table.RemoveColumns(ColHora,{"Duração", "Segundo"}),
    ColHoraNum = Table.AddColumn(RemoveCols, "Hora Num", each Time.Hour([Hora]), Int64.Type),
    ColMinutoNum = Table.AddColumn(ColHoraNum, "Minuto Num", each Time.Minute([Hora]), Int64.Type),
    ColSegundoNum = Table.AddColumn(ColMinutoNum, "Segundo Num", each Time.Second([Hora]), Int64.Type),
    ColAMPM = Table.AddColumn(ColSegundoNum,"AMPM", each if [Hora Num] < 12 then "AM" else "PM", type text),
    ColHoraAMPM = Table.AddColumn(ColAMPM, "Hora AMPM", each 
        if [Hora Num] = 0 then "12 AM"
        else if [Hora Num] >= 1 and [Hora Num] <= 11 then Number.ToText([Hora Num]) & " AM" 
        else if [Hora Num] = 12 then "12 PM"
        else if [Hora Num] >= 13 then Number.ToText([Hora Num] - 12) & " PM"  
        else "Unknown", type text),
    ColPeriodo = 
        Table.AddColumn(ColHoraAMPM, "Período", each 
            if        [Hora Num] >= 0 and [Hora Num] <= 5 then "MADRUGADA"
            else if   [Hora Num] >= 6 and [Hora Num] <= 11 then "MANHÃ"
            else if   [Hora Num] >= 12 and [Hora Num] <= 17  then "TARDE"
            else if   [Hora Num] >= 18 and [Hora Num] <= 23 then "NOITE"
            else "Unknown", type text
            ),
    ColPeriodoOrdem = 
        Table.AddColumn(ColPeriodo, "Período Ordem", each 
            if        [Hora Num] >= 0 and [Hora Num] <= 5 then 1
            else if   [Hora Num] >= 6 and [Hora Num] <= 11 then 2
            else if   [Hora Num] >= 12 and [Hora Num] <= 17  then 3
            else if   [Hora Num] >= 18 and [Hora Num] <= 23 then 4
            else 5, Int64.Type
        )
in
    ColPeriodoOrdem

obrigado, irei testar agora.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...