La optimización de modelos se ha convertido en un tema candente y esencial en la medida que la cantidad de datos disponibles sigue creciendo exponencialmente. En este articulo explicaremos algunos consejos sencillos y otros más avanzados para optimizar nuestros modelos tabulares. No hace falta decir que estos consejos también aplican a modelos de Power BI.
OPTIMIZACIONES BÁSICAS
ELIMINAR COLUMNAS INNECESARIAS
Tal vez sea un poco evidente mencionarlo, pero cada una de las columnas que llevemos al modelo implica mayor consumo de memoria, por lo tanto es importante eliminar aquellas columnas que sepamos que no aportan mucho o nada al analisis. Ejemplo de esto son las columnas de Auditoria de las tablas.
COLUMNS CALCULADAS VS MÉDIDAS
Las columnas calculadas en los Modelos Tabulares se crean en tiempo de procesamiento y se añaden a las columnas ya existentes por lo tanto ocupan espacio en memoria. Básicamente lo que se hace es “Materializar” el dato en nuestro modelo. Es posible reemplazar muchos de estas columnas calculadas por Médidas calculadas para reducir el espacio.
Veamos esto con un ejemplo, es normal que necesitemos crear un cálculo entre dos columnas del modelo, por ejemplo “Monto Facturado * Cantidad”, con lo cual es posible que utilizemos la alternativa simple de crear una columna calculada (Total) con dicha multiplicación y luego crear una métrica con el “SUM(Total)” de dicha columna.
Esto funciona de manera más eficiente si creamos directamente la medida, siguiendo nustro ejemplo sería: SUMX(Ventas, Ventas[Cantidad] * Ventas[Monto Facturado])
Ambas médidas devuelven el mismo resultado, pero el consumo de memoria de la segunda es significativamente menor.
REVISAR LA CARDINALIDAD
Tenemos que prestar mucha atención a la cardinalidad de nuestras columnas, puesto que en los campos de muchos valores distintos el motor no puede practicamente aplicar compresión y por lo tanto el tamaño consumido es mayor.
Un ejemplo tipico para optizar esto es cuando tenemos campos de “Fecha y Hora”, la cantidad de combinaciones posibles es muy grande, por lo tanto es más eficiente si separamos dicho campo en 2. (Uno para fecha y otro para Hora)
REDUCIR LA PRESICIÓN
Esto va relacionado al punto anterior. El objetivo de reducir la presición de un campo es que haya una menor cantidad de valores distintos y por lo tanto aumentar la posible compresión.
Ejemplo, si tenemos un campo con 18 decimales, es posible que para nuestro negocio alcance con tener una presición de 3 decimales y la diferencia de consumo de memoria sería significativa.
OPTIMIZACIONES DE CÓDIGO (DAX)
EVITAR LAS FUNCIONES DE CONTROL DE ERRORES
En la medida de que sea posible evitar este tipo de funciones (SERROR e IFERROR) porqué el motor tiene que ir fila por fila analizando si se debe aplicar o no, lo cual evidentemente tiene un costo. Tener en cuenta que muchas funciones tienen la posibilidad de incluir entre los parametros estos controles lo cual sería más eficiente.
OPTIMIZACIONES AVANZADAS
ISAVAILABLEINMDX
Si no se utilizan herramientas clientes que exploten el modelo utilizando queries MDX como podria ser Excel deberíamos deshabilitar esta propiedad y no tendria ningún impacto en las herramientas que se conectan utilizando queries DAX, sin embargo el ahorro de memoria es signifactivo porque no es necesario construir todas las jerarquias de atributos para MDX.
Importante: al momento de crear este articulo no es posible cambiar esta propiedad desde Visual Studio, por lo tanto hay que utilizar “Tabular Editor”
Para ampliar este punto, recomendamos la lectura del articulo de Chris Webb aqui
Esperamos que estas optimizaciones sean de útilidad para mejorar sus modelos!
0 Comments