Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
En un recente proyecto tuve la necesidad de optimizar el tamaño del archivo Qvw en memoria, esto porque mi aplicatión tiene más de 1.000.000.000 de filas y eso sólo en una tabla.
El motivo de toda esa memoria ocupada además de las filas es que hay muchos valores distintos en el campo Valor.
Aquí Symbol Tables and Bit-Stuffed Pointers y The Importance Of Being Distinct más detalles sobre el uso de la memoria en QlikView.
Por solucionar este problema pensé que siempre posible escribir un numero como potencia de 2 más un numero. Por ejemplo
52 = (2 ^ 5) + 20
81 = (2 ^ 6) + 17
La misma regla vale por los números negativos y con coma.
SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='€ #.##0,00;-€ #.##0,00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET MonthNames='gen;feb;mar;apr;mag;giu;lug;ago;set;ott;nov;dic';
SET DayNames='lun;mar;mer;gio;ven;sab;dom';
SET App.View.Expression.OptimizedValue = (($1Div << $1PowExp) + $1Mod);
Fact:
LOAD * INLINE [
Value
'-45,2458'
-15
52
81
];
Right Join (Fact)
LOAD
*
,Div(Value, pow(2, RangeMax(1, Floor(log(Value))))) as ValueDiv
,fmod(Value, pow(2, RangeMax(1, Floor(log(Value))))) as ValueMod
,RangeMax(1, Floor(log(Value))) as ValuePowExp
Resident Fact;
El número será calcolado con este sencilla expresión
SET App.View.Expression.OptimizedValue = (($1Div << $1PowExp) + $1Mod);
que se utilizerá así
$(App.View.Expression.OptimizedValue(Value))
El símbolo << desplaza los bit de un valor ValuePowExp optimizando el cálculo de la potencia.
Ventajas:
Optimización del espació ocupado en memoria.
Desventajas:
Más campos en la nube.
Consejo utilizar esta tecnica cuando el número de los campos son pocos y cuando los hay muchos valores distintos en el campo.
Muchas gracias por compartirlo! Un saludo
Hola Alex,
de nada.