Como vocês sabem, na #Dataside amamos compartilhar conhecimento, então o Rafael Bezerra escreveu um artigo especial para explicar melhor sobre como criar medida que apresente Dias, Horas, Minutos e Segundos. Boa leitura!
Olá Gente, há algum tempo tive a necessidade de desenvolver uma medida que apresentasse Dias, Horas, Minutos e Segundos. Quando concluí, achei interessante compartilhar tal conhecimento com vocês!
Então, vamos estudar como criá-la?
Para não estender muito essa postagem, já trago o cálculo de horas em formato decimal.
Nossa coluna explorada foi a [Tempo Dec]
2. No nosso exemplo, a Medida criada para apresentar somente horas reflete um total de:
3. Vamos a Prática!
Precisei adaptar a lógica e extrair os dias, transformando a apresentação da informação do seguinte modo:
A Medida foi desenvolvida por meio de variáveis e, possui 05 blocos de desenvolvimento, vamos comentá-los:
Bloco 1: Extrair o inteiro da hora que está em formato [Tempo Decimal].
VAR Vl = SUM ( fDados[Tempo Dec] ) • realizando a soma total do tempo
VAR vHr = INT(Vl)
reservando apenas o inteiro da soma do tempo, que é a “hora”
Com a Variável vHr tempos o total de Horas
Bloco 2: Extrair os Segundos de Horas da diferença decimal do tempo [Vl] e calcular os Minutos e Segundos, posteriormente obter o total em horas
VAR vSegHora = (Vl-vHr)*3600
Reservamos a diferença decimal do tempo [Vl] e o inteiro da hora [vHr] e depois multiplicar por 3600 segundos que equivale a 1 hora.
VAR vMinDec = Divide(vSegHora,60)
Como já temos a hora em segundos, precisamos extrair os minutos. Portanto, dividimos por 60, pois 01 hora possui 60 minutos.
VAR vMin = INT(vMinDec)
Agora que já temos os Minutos em modo decimal, precisamos reservar o inteiro dele, que será nosso minutos.
VAR vSegDec = (vMinDec-vMin)*60
Nesse cálculo, vamos obter a diferença dos minutos decimais e o seu inteiro para extrair os segundos.
VAR vSeg = ROUND ( vSegDec, 0 )
Por último, vamos reservar o arredondamento dos Segundos da nossa
Com o bloco 1 e bloco 2 temos o total de horas
Bloco 3: Nesse bloco, iremos calcular os dias
VAR vDiasDec = DIVIDE(vHr,24)
Para obter os dias, chamamos a variável [vHr], construída no bloco 1, que são as horas por inteiro e dividimos por 24, que é o total de horas em um dia.
VARdd = IF(vHr>=24, INT(vDiasDec), 0)
Usamos o a Função IF, para extrair os dias inteiros, onde:
Se vHr>=24, termos 1 dia ou mais. Então, extrairmos os dias com função [INT(vDiasDec)]
Se não for, significa que é menor que 24 horas. Então, significa que não haverá dias somente horas, portanto pedimos que retorne 0.
Essa variável é o pulo do Gato!
Bloco 4: Nesse bloco, iremos calcular as Horas.
VAR hh = INT((vDiasDec-dd)*24)
Vamos calcular a nossa hora, pegando o inteiro da diferença de [vDiasDec] pelo resultado da variavel [dd] multiplicando 24 horas.
Bloco 5: Chegamos no Final, já temos todos os cálculos necessário.
E Rafael, o que é preciso agora?
Agora, vamos arrumar esses cálculos para eles se apresentarem bonitinhos no visual.
Para evitar, que nossa medida retorne apenas [1] dígito em cada cálculo, criaremos variáveis para melhorar a visualização. A função [LEN] pesquisará os cálculos. Se a variável contiver [1] dígito, será adicionado a ela um “0” a esquerda, caso contrário, queremos apenas a própria variável.
VAR vDD = IF ( LEN ( dd ) = 1, “0” & dd, dd )
VAR vHH = IF ( LEN ( hh ) = 1, “0” & hh, hh )
VAR vMM = IF ( LEN ( vMin ) = 1, “0” & vMin, vMin )
VAR vSS = IF ( LEN ( vSeg ) = 1, “0” & vSeg, vSeg )
Vamos criar nossa variável Sucesso?
Fácil! Precisamos apenas concatenar as variáveis e convertê-las para inteiro.
VAR TMP = CONVERT ( vDD & vHH & vMM & vSS, INTEGER )
Pronto! Agora basta chamá-la
RETURN
TMP
E Agora, Rafael?
Simples, basta alterarmos o formato da medida para apresentar os Dias, Horas, Minutos e Segundos e posteriormente incluir no visual.
Espero que esse conteúdo tenha te ajudado. Se você gostou, deixe o like e compartilhe. 🙂