top of page

Calculo diferencia de horas y minutos

Para el siguiente ejemplo, vamos a calcular la diferencia de horas entre una hora de inicio, y, una hora de fin.


Tenemos los siguientes datos:












Este ejemplo, fue uno de los ejemplos con la función RESIDUO, pero ahora, lo vamos a realizar en Power Query.


El modelo esta en formato de tabla, y, se llama horas.


Con una celda dentro del modelo, vamos a la pestaña datos, dentro de obtener y transformar datos, hacemos clic en de una tabla o rango.







También, con una celda dentro del modelo, podemos hacer clic con botón alternativo de ratón, y, seleccionar obtener datos de tabla/rango.












Voy a ir haciéndolo paso a paso para comprender lo que vamos haciendo, al final, solo quedara una única expresión.


Lo primero que vamos a realizar es la resta de la hora final menos la hora de inicio, para ello, vamos a agregar una columna personalizada, vamos a la pestaña agregar columna, y, hacemos clic en columna personalizada.








Como nombre, le ponemos diferencia_horas, en la ventana de formula, restamos la columna fin menos la columna de inicio.









Aceptamos, y, tenemos la diferencia de horas.









Lo vamos a pasar a formato general, para ello, vamos a pasos aplicados, hacemos clic en la rueda dentada del paso diferencia_horas.












Después del signo igual, ponemos la función Number.From, que devuelve un valor numérico correspondiente a un valor dado, y, como argumento es la operación de resta de horas.












Aceptamos, y, tenemos los valores en formato general.








Vemos dos números negativos, que corresponden a un inicio de un día, y, un final del día siguiente.








El valor que nos devuelve no es correcto, si multiplicamos por 24 horas.











Vemos que donde la hora de inicio y de fin son del mismo día, nos devuelve la diferencia de horas correctas, pero no cuando la hora de inicio comienza en un día, y, termina en el día siguiente.


Vamos a borrar la multiplicación por 24 de la columna Diferencia_horas.


Vamos a agregar otra columna personalizada, y, vamos a redondear los valores obtenidos en la columna Diferencia_horas hacia abajo, es decir, al entero hacia abajo mas próximo, para ello, usamos la función Number.RoundDown.











Vemos que los valores positivos son redondeados a cero, que es el entero hacia abajo mas próximo, pero el número, o, números negativos, en entero hacia abajo mas próximo, es el numero -1.







Vamos a restar la columna Diferencia_horas menos la columna Redondear_abajo, para ello, agregamos una nueva columna personalizada.










Solo han cambiado los valores -1, el resto de las cantidades son las mismas, porque se le ha restado 0.


Pues estos valores obtenidos, son los correspondientes a las horas correctas, quiere decir que ya lo tenemos.







Solo nos queda multiplicar la columna resta por 24, por lo que añadimos una nueva columna.












Aceptamos, y, ya tenemos la diferencia de horas.






Ahora, lo haremos en una sola expresión, para ello, en una nueva consulta con el mismo modelo, agregamos una columna personalizada, la volvemos a llamar Diferencia_horas, en la ventana de formula, ponemos let, pulsamos enter, creamos una variable, donde almacenamos, igual que antes, la diferencia de hora final menos hora inicio en formato general.













Pulsamos enter, ponemos in, pulsamos enter, abrimos un paréntesis, ponemos el nombre de la variable, la restamos con el redondeo de la variable al entero hacia abajo mas próximo, cerramos dos paréntesis, y, multiplicamos por 24.















Aceptamos, y, tenemos los mismos resultados que anteriormente.









Lo siguiente es la misma operación, pero tenemos también una diferencia de minutos.


Tenemos el siguiente modelo, donde tenemos dos horas de inicio y fin, con una diferencia de minutos.










Para el cálculo de horas, es igual que para el ejemplo anterior.














Vemos que donde hay una diferencia de minutos, el número es decimal.









Debemos de quedarnos con la parte entera, para ello, vamos a usar la función Number.IntegerDivide, esta función devuelve la parte entera de dividir un numero entre otro, tiene tres argumentos, pero nosotros vamos a usar solo el primer y segundo argumento, que son numero1, y, numero2.


El argumento numero1, es la resta que ya tenemos, y, el argumento numero2, es 1, es decir, vamos a dividir el numero resultante entre si mismo, pero solo nos devolverá la parte entera.















Aceptamos, y, vemos solo la diferencia de horas.


Lo ponemos en número entero.









Vamos, ahora, a los minutos.


Agregamos una nueva columna personalizada.


Para obtener la parte decimal, debemos de restar al numero la parte decimal, agregamos una nueva columna personalizada, creamos una variable donde almacenamos la diferencia de hora final menos hora inicio en formato general, creamos otra variable, donde almacenamos la parte entera de la variable “x”.















Dentro de in, a la variable “x” le restamos el entero hacia abajo mas próximo, multiplicamos por 24 horas, restamos la variable “y”, esta operación queda encerrada entre paréntesis, y, multiplicamos por 60 minutos.



















Aceptamos, ponemos formato de numero entero, y, ya tenemos la diferencia de minutos.









Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page