Totales laborables y festivos
- Jaime Franco Jimenez

- 6 abr 2024
- 3 Min. de lectura
Tenemos un modelo formador por tres columnas, en la primera columna, tenemos una serie de fechas, en la segunda columna, una serie de elementos asociados a cada fecha, y, en la ultima columna, las ventas que corresponden con cada fecha.
Debemos de calcular las ventas totales para los días de la semana, y, los fines de semana, además, los elementos cuya venta sea máxima y mínima entre los días de la semana, y, los elementos cuya venta sea máxima y mínima para los fines de semana.
El modelo esta en formato de tabla, y, se llama tabla.
Nos colocamos en la celda D1, ponemos Dia semana, y, aceptamos, por lo que se añade una columna a la tabla.
En la celda D2, ponemos la funcion DIASEM, como argumento número de serie, abrimos corchetes, ponemos la arroba (@) y Fechas, cerramos corchetes, de esta manera, trabajara con cada celda de la columna fechas, como argumento tipo, en mi caso, selecciono 2, es decir, la semana comienza en lunes, y, acaba en domingo.
=DIASEM([@Fechas];2)
En la celda F1, usamos LET, creamos una variable, usamos la funcion PIVOTARPOR, como argumento row fields, seleccionamos la columna de elementos, como argumento col fields, seleccionamos la columna de día semana, y, comparamos con menor o igual a 5, como argumento values, seleccionamos la columna de ventas, como argumento funcion, ponemos SUMA, como argumento field headers, ponemos 0, como argumento row total Depth, ponemos 0, omitimos el argumento row sort order, como argumento col total depht, ponemos 0.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);a)
Tenemos una matriz desbordada de tres columnas, en la primera columna, tenemos los elementos, en la segunda columna, los totales para los fines de semana, y, en la tercera columna, los totales, para los días laborables.
Creamos otra variable, usamos la funcion BYCOL, como argumento array, ponemos la variable “a”, como argumento funcion, ponemos LAMBDA, abrimos paréntesis, declaramos una variable, como argumento calculo de LAMBDA, ponemos la funcion MIN, como argumento, ponemos la variable “x”.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;BYCOL(a;LAMBDA(x;MIN(x)));b)
Tenemos una matriz desbordada en horizontal de tres columnas, en la primera columna, tenemos 0, porque en la primera columna, están los elementos, y, en la segunda y tercera columna, el valor mínimo para fines de semana, y, días laborables.
Antes de BYCOL, usamos el condicional SI, como argumento prueba lógica, igualamos la funcion BYCOL a la variable “a”, como argumento valor si verdadero, usamos la funcion TOMAR, como argumento matriz, ponemos la variable “a”, omitimos el argumento filas, como argumento columnas, ponemos 1, es decir, si se cumple la condición, nos devolverá la primera columna, que son los elementos, como argumento valor si falso, que nos devuelva un error.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());b)
Tenemos una matriz desbordada de tres columnas, y, seis filas, con el elemento donde hay coincidencia, y, error donde no la hay.
Antes del condicional SI, usamos la funcion ENFILA, como argumento matriz es el condicional SI, como argumento ignorar, ponemos 3, es decir, ignorar blancos y errores.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;ENFILA(SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());3);b)
Ya tenemos el elemento menor de los festivos, o, fines de semana y días laborables.
Creamos otra variable, copiamos la expresión de la variable “b”, y, la pegamos, cambiamos la funcion MIN por la funcion MAX.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;ENFILA(SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());3);c;ENFILA(SI(BYCOL(a;LAMBDA(x;MAX(x)))=a;TOMAR(a;;1);NOD());3);c)
Tenemos el elemento mayor para fines de semana, y, días laborables.
Usamos el argumento calculo de LET, usamos APILARV, como argumento matriz1, usamos una constante de matriz, abrimos unas llaves, entre comillas dobles, Tipo de día, barra inclinada, entre comillas dobles, ponemos Total, barra inclinada, entre comillas dobles, ponemos Menor elemento, barra inclinada, entre comillas dobles, ponemos Mayor elemento.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;ENFILA(SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());3);c;ENFILA(SI(BYCOL(a;LAMBDA(x;MAX(x)))=a;TOMAR(a;;1);NOD());3);APILARV({"Tipo de dias"\"Total"\"Menor elemento"\"Mayor elemento"}
Este va a ser el encabezado.
Como argumento matriz2, usamos de nuevo la funcion APILARV, como argumento matriz1, usamos APILARH, como argumento matriz1, entre comillas dobles, ponemos Festivos, como argumento matriz2, usamos la funcion SUMA, como argumento usamos la funcion ELEGIRCOLS, como argumento matriz, ponemos la variable “a”, como argumento numero de columna1, ponemos 2, cerramos paréntesis, vamos a obtener el total para los fines de semana, como argumento matriz3, ponemos la variable “b”, cerramos paréntesis.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;ENFILA(SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());3);c;ENFILA(SI(BYCOL(a;LAMBDA(x;MAX(x)))=a;TOMAR(a;;1);NOD());3);APILARV({"Tipo de dias"\"Total"\"Menor elemento"\"Mayor elemento"};APILARV(APILARH("Festivos";SUMA(ELEGIRCOLS(a;2));b)
Como argumento matriz2 del último APILARV, volvemos a usar APILARH, como argumento matriz1, entre comillas dobles, ponemos Laborables, como argumento matriz2, usamos SUMA, como argumento ponemos la funcion ELEGIRCOLS, como argumento matriz, ponemos la variable “a”, como argumento numero de columna1, ponemos 3, cerramos paréntesis, como argumento matriz3, ponemos la variable “c”, cerramos paréntesis.
=LET(a;PIVOTARPOR(Tabla3[Elementos];Tabla3[Dia semana]<=5;Tabla3[Ventas];SUMA;0;0;;0);b;ENFILA(SI(BYCOL(a;LAMBDA(x;MIN(x)))=a;TOMAR(a;;1);NOD());3);c;ENFILA(SI(BYCOL(a;LAMBDA(x;MAX(x)))=a;TOMAR(a;;1);NOD());3);APILARV({"Tipo de dias"\"Total"\"Menor elemento"\"Mayor elemento"};APILARV(APILARH("Festivos";SUMA(ELEGIRCOLS(a;2));b);APILARH("Laborables";SUMA(ELEGIRCOLS(a;3));c))))
Aceptamos, y, ya lo tenemos.
Miguel Angel Franco












Comentarios