DAX–Tabla de Parámetros para condicionar cálculos

A veces necesitamos que nuestras medidas calculadas varíen según parámetros seleccionados, como podrían ser diferentes tasas, representaciones numéricas, escenarios de análisis, conversiones de moneda.

Necesitamos armar una tabla con una única columna donde tendremos los valores de selección y aplicación, o una tabla con mas de un campo. Esta tabla no debe estar relacionada con otras tablas del modelo.

image   image

 

Creada e incorporada la tabla, debemos modificar nuestras medidas calculadas hacerlas sensibles a los valores seleccionados.

Tomando la siguiente expresión de ejemplo

Sales Amount:=SUM([SalesAmount])

 

Debemos modificar la expresión a la siguiente forma:

Sales Amount:= 
   
IF

       
HASONEVALUE
(Escala[Escala]); 
       
SUM([SalesAmount])/VALUES
(Escala[Escala]); 
       
SUM
([SalesAmount])
    )

 

Ahora si nuestra tabla de parámetros tiene mas de una columna la expresión debería tener la siguiente forma:

Sales Amount:= 
    IF
        HASONEVALUE(Escala[Factor]); 
        SUM([SalesAmount])*(1+VALUES(Escala[Factor]); 
        IF( NOT( FILTERED( Escala[Escala]) ),
           SUM([SalesAmountQuota]),
           BLANK()
        )
    )

Consideraciones para optimizar modelos Tabulares y PowerPivots

A continuación se enumeran algunos tips para “optimizar” el uso de memoria en los modelos tabulares o PowerPivot, en relación al uso de memoria RAM.

Importar solo las columnas útiles

Debido a que los datos son almacenados por columna, cada una de estas posee un costo, siendo mas caras aquellas que poseen una gran cantidad de valores diferentes, motivo por el cual es importante que al importar tablas en PowerPivot solo debemos incorporar aquellas columnas que utilizaremos en filtros, relaciones y cálculos.

Las columnas que podríamos excluir en la carga son:

  • Claves Primarias de tablas de hechos
  • Identificadores de transacciones en las tablas de hechos
  • GUIDs y columnas utilizadas para replicación o auditoria
  • Timestamp, Fechas de Creación y Modificación
  • Normalizar Columnas

    Evitar incorporar columnas que son cálculos de otras y armar medidas o campos calculados en el modelo. Si tenemos por ejemplo las columnas cantidad, precio, y monto total, esta ultima podríamos excluirla, incorporando una medida o campo calculado utilizando cantidad y precio de la forma

    Monto Total := SUMX( Ventas, Ventas[Precio] * Ventas[Cantidad])

    En este ejemplo Precio y Cantidad serian columnas con una mayor tasa de compresión o mayor probabilidad de repetición de valores que el producto de ambas, siendo el monto total calculado en el momento de la consulta.

    Dividir columnas de alta cardinalidad

    Si una columna posee demasiados valores diferentes, como podría ser un ID de transacción o  fecha y hora de un evento, si dividimos en la carga en varias columnas, por ejemplo fecha y hora en dos columnas, estas ocupan mucho menos memoria que el campo original conteniendo ambos valores.

    Reducir la precisión cuando es posible

    Reduciendo la precisión de una columna podríamos quizás reducir la cantidad de valores diferentes, por ende el uso de memoria.