Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola a todos! Hace unos días que estoy intentando algo que no he podido resolver. Paso a contarles a ver si me pueden ayudar con ello:
Tengo 2 tablas:
- animales
- pesaje
En la primera se registran los animales que entran a la veterinaria desde su nacimiento, y en la tabla pesaje se registra la evolución del peso de cada animal.
En una tabla pivot (o pivotante) de manera muy simple he intentado mostrar esos pesos de manera exitosa como muestro en la siguiente imagen:
NOTA: la fecha aparece así porque arrastré la dimensión fecha hacia arriba para que se muestre de manera horizontal.
El problema es que ahora tengo que agregar otra expresión donde calcule cuantos gramos o kilos ha variado el peso de una a otra fecha. Pensé que iba a solucionarlo con la función BEFORE, pero al haber registros null en algunos casos porque no se pesan todos exactamente la misma fecha, solamente realiza el cálculo cuando tiene un registro anterior. COMO PUEDO SOLUCIONARLO?
Así con error:
Así sin error:
En el caso sin error echo en Excel para tal fin, vemos que en el "Perro 1" se pesó todos los días y por lo tanto no hay problemas. Sin embargo en el caso del "Perro 2" la variación del peso "Dif. Ant." de la fecha 05/08/2016 es correcto que sea null porque el 01/07/2016 no se lo pesó, o en tal caso 1,2 teniendo en cuenta que el peso anterior es 0. Sin embargo (y aquí el problema) en el peso registrado el 23/10/2016 la variación debería ser de 2 KG porque al no haberse pesado el 07/09/2016, se debe tomar el peso del 27/08/2016 (1,5KG)
3,5 - 1,5 = 2 KG.
Espero que me puedan ayudar. ADJUNTO .QVW
Walter.
Hola Walter, puedes modificar la carga para añadir el peso anterior de cada animal:
pesaje_tmp:
LOAD * Inline [
...
];
pesaje:
NoConcatenate
LOAD id_pesaje, fecha, id_animal, peso, If(Peek('id_animal')=id_animal, Peek(peso)) as pesoAnt
Resident pesaje_tmp Order By id_animal, fecha;
DROP Table pesaje_tmp;
Para obtener la diferencia podrías usar:
Sum(peso)-Sum(pesoAnt)
Ruben aprecio tu ayuda. Lo he probado y el inconveniente que tengo con tu idea es que en la primer fecha de la tabla (01/07/2016, siguiendo con el último ejemplo) calcula un peso anterior que no corresponde al id_animal. Pienso que debe traer un registro anterior en la tabla pesaje, pero que corresponde a otro animal.
Hola Walter, para el primer mes de cada animal supongo que mostrará el mismo valor que el peso, ya que la diferencia se realizará sobre cero.
Al hacer If(Peek('id_animal')=id_animal ya se comprueba que se trata del mismo animal.
Si quieres evitar la operación cuando el peso anterior es 0 o no hay peso anterior puedes poner como expresión:
If(Alt(pesoAnt, 0)<>0, Sum(peso)-Sum(pesoAnt))
Si no es por eso añade una captura o escribe las diferencias para saber de donde viene el "peso anterior que no corresponde al id_animal" porque es difícil imaginar lo que pueda estar pasando sin ver datos.
Saludos.