top of page

Duracion y descanso vuelos

Tenemos una serie de pilotos, con un inicio de vuelo y fin de vuelo.


Debemos de crear un reporte con el tiempo de vuelo total por piloto, cuyo cálculo es la resta de fin de vuelo con inicio de vuelo, y, también, debemos de calcular el tiempo de descanso por piloto, que es la resta del inicio de vuelo menos el fin de vuelo del registro anterior.


Empecemos…


En la celda F2, usamos LET, creamos una variable, seleccionamos el rango C2:C13, creamos otra variable, seleccionamos el rango B2:B13, creamos otra variable, y, seleccionamos el rango A2:A13.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13


Creamos otra variable, vamos a transponer los valores únicos de los pilotos, para ello, usamos la función TRANSPONER, como argumento matriz, ponemos la función UNICOS, como argumento matriz, ponemos la variable “zz”.


Probamos variable.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));a)


Tenemos los pilotos únicos en horizontal.


Creamos otra variable, usamos la función MAP, como argumento array, ponemos la variable “xx”, como argumento array2, ponemos la variable “yy”, como argumento función, ponemos LAMBDA, y, declaramos dos variables.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;MAP(xx;yy;LAMBDA(x;y

 

Como argumento calculo de LAMBDA, abrimos paréntesis, restamos la variable “x” con la variable “y”, cerramos paréntesis, y, multiplicamos por 24, para que el resultado nos lo de en horas.


Cerramos paréntesis.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;MAP(xx;yy;LAMBDA(x;y;(x-y)*24));b)


Tenemos la resta de cada inicio y fin de vuelo.


Seleccionamos el resultado, y, lo ponemos en formato de numero con dos decimales.


Estos resultados debemos de dividirlo en cuatro, que son los pilotos que hay, para ello, creamos otra variable, usamos la función REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “a”, como argumento función, ponemos LAMBDA, y, declaramos dos variables.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;MAP(xx;yy;LAMBDA(x;y;(x-y)*24));c;REDUCE("";a;LAMBDA(x;y


Como argumento cálculo de LAMBDA, usamos la función APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la función SUMA, como argumento usamos la función FILTRAR, como argumento array, ponemos la variable “b”, como argumento include, ponemos la variable “zz” e igualamos a la variable “y”.


La función FILTRAR nos va a devolver una matriz desbordada de cinco columnas, sobrando la primera columna, en el resto de las columnas, tenemos la diferencia entre inicio y fin de vuelo para cada piloto.


Con la función SUMA, suma cada columna de forma independiente, por lo que tenemos el tiempo de vuelo de cada piloto.


Vamos a quitar la primera columna, para ello, antes de la función REDUCE, usamos la función EXCLUIR, como argumento matriz es la función REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;MAP(xx;yy;LAMBDA(x;y;(x-y)*24));c;EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;SUMA(FILTRAR(b;zz=y)))));;1);c)


Vamos a poner estos valores en vertical, para ello, antes de EXCLUIR, usamos la función ENCOL.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;MAP(xx;yy;LAMBDA(x;y;(x-y)*24));c;ENCOL(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;SUMA(FILTRAR(b;zz=y)))));;1));c)

 

Lo ponemos en formato de número, y, damos dos decimales.


Ya tenemos el tiempo de vuelo para cada piloto.


Lo siguiente es calcular el tiempo de descanso para cada piloto, como hemos dicho al principio, debemos de restar el inicio de vuelo con el fin de vuelo del registro anterior, quiere decir, que la primera fecha para cada piloto no debemos de tenerla en cuenta, porque no hay una fecha anterior que restar.


El tiempo de descanso lo vamos a realizar en la celda G2.


La siguiente parte de la primera expresión: 


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz))


Es igual para la expresión que vamos a crear en la celda G2.


Creamos otra variable, usamos la función REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “a”, como argumento función, ponemos LAMBDA, y, declaramos dos variables.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;REDUCE("";a;LAMBDA(x;y


Como argumento calculo de LAMBDA, usamos la función APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la función FILTRAR, como argumento array, ponemos la variable “yy”, como argumento include, ponemos la variable “zz” e igualamos a la variable “y”.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));b)

 

Tenemos una matriz desbordada de cinco columnas con las fechas de inicio para cada piloto, en cada columna, están las fechas de inicio para dicho piloto.


Debemos deshacernos de la primera columna y de la primera fila, porque no tiene fecha anterior que restar, para ello, antes de REDUCE, usamos la función EXCLUIR, como argumento matriz, es la función REDUCE, como argumento filas, ponemos 1, como argumento columnas, ponemos 1.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);b)


Tenemos las fechas con que restar.


Vemos que tenemos errores, pues, vamos a usar la función SI.ERROR, y, ponemos blanco donde haya error.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");b)


Copiamos la expresión, la copiamos con CTRL más C, creamos otra variable, y, pegamos la expresión con CTRL más V, debemos de cambiar el argumento array de FILTRAR por la variable “xx”.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");c;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(xx;zz=y))));;1);"");c)


Tenemos las fechas de fin de vuelo para cada piloto.


Creamos otra variable, abrimos paréntesis, restamos la variable “b” menos la variable “c”, cerramos paréntesis, y, multiplicamos por 24.


Lo ponemos en formato de numero con dos decimales.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");c;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(xx;zz=y))));;1);"");d;(b-c)*24;d)


Tenemos el tiempo de descanso para cada piloto.


Quitamos los errores con la función SI.ERROR, y, ponemos blanco donde haya error.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");c;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(xx;zz=y))));;1);"");d;SI.ERROR((b-c)*24;"");d)


Usamos el argumento cálculo de LET, donde usamos la función BYCOL, porque vamos a trabajar con cada columna, como argumento array, ponemos la variable “d”, como argumento función, ponemos LAMBDA, declaramos una variable, y, sumamos dicha variable.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");c;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(xx;zz=y))));;1);"");d;SI.ERROR((b-c)*24;"");BYCOL(d;LAMBDA(x;SUMA(x))))

 

Tenemos el tiempo de descanso total para cada piloto.


Igual que antes, usamos ENCOL para poner los resultados en vertical.


=LET(xx;C2:C13;yy;B2:B13;zz;A2:A13;a;TRANSPONER(UNICOS(zz));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;zz=y))));1;1);"");c;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(xx;zz=y))));;1);"");d;SI.ERROR((b-c)*24;"");ENCOL(BYCOL(d;LAMBDA(x;SUMA(x)))))


Pues, ya tenemos nuestro ejercicio resuelto.



Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page