Ir para conteúdo
  • 0

Criar tabela de dia com Horas


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

Pergunta

  • Alunos

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
  • Alunos
  • 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
  • Alunos
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

Faça login para comentar

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



Entrar Agora
×
×
  • Criar Novo...