Reducir la cardinalidad para mejorar el rendimiento
Incluso con DAX optimizado, un modelo semántico puede ser lento si contiene demasiados datos. La cardinalidad (el número de valores únicos de una columna) afecta directamente al tamaño del modelo, el consumo de memoria y el rendimiento de las consultas. Reducir la cardinalidad es una de las formas más eficaces de hacer que un modelo sea más rápido.
Comprender cómo afecta la cardinalidad al rendimiento
Los modelos semánticos usan un motor de compresión en memoria denominado VertiPaq, que comprime la columna de datos por columna. Las columnas con menos valores únicos comprimen mejor y consultan más rápido. Una columna con 10 valores únicos comprime mucho más eficazmente que una columna con 10 millones de valores únicos.
Las columnas de cardinalidad alta crean dos problemas:
- Tamaño de modelo mayor. Los valores más únicos requieren más almacenamiento, lo que aumenta el uso de memoria y puede ralentizar la actualización de datos.
- Consultas más lentas. El motor debe procesar valores más distintos al filtrar, agrupar o agregar. Las columnas de alta cardinalidad en las relaciones también aumentan el coste de la unión de tablas.
Piense de esta manera: si el modelo es un diccionario, la cardinalidad es el número de palabras únicas. Un diccionario con un millón de entradas tarda más en buscar que uno con mil.
Identificación de columnas de cardinalidad alta
No todas las columnas contribuyen igualmente al tamaño del modelo. Para encontrar a los delincuentes más grandes, busque columnas con estas características:
- GUID o claves sustitutivas que no se utilicen en relaciones o informes. A menudo se cargan de forma predeterminada, pero no sirven para ningún propósito en el modelo.
- Marcas de tiempo con alta precisión. Una columna datetime que almacena valores en milisegundos tiene valores mucho más únicos que una columna de fecha que almacena valores en el nivel de día.
- Columnas de texto libre o descripción. Las columnas de texto con valores únicos por fila (como descripciones de transacciones o comentarios) se comprimen mal.
- Identificadores únicos , como números de pedido, números de factura o identificadores de sesión que no son necesarios para los informes.
En Power BI Desktop, puedes examinar las estadísticas de las columnas en la vista de modelo. La vista previa de datos en Power Query también muestra recuentos de valores distintos durante la transformación.
Aplicar estrategias de reducción
Una vez que haya identificado columnas de cardinalidad alta, aplique una o varias de estas estrategias:
Quite las columnas sin usar. Si una columna no se utiliza en relaciones, medidas, elementos visuales o roles de seguridad, no la importes. Esto a veces se denomina filtrado vertical. Revise el modelo periódicamente para asegurarse de que cada columna tiene un propósito.
Disminuir la precisión temporal. Si los informes solo requieren una granularidad diaria, trunca las columnas de fecha y hora a la fecha en Power Query antes de cargarlas. Pasar de fecha y hora (millones de valores únicos) a fecha (unos pocos miles) reduce drásticamente la cardinalidad.
Agrupar valores continuos. Agrupar valores numéricos continuos en intervalos. Por ejemplo, en lugar de almacenar edades exactas (de 0 a 120), cree bandas de edad como "18-25", "26-35", y "36-45". Esto reduce los valores únicos al tiempo que conserva el valor analítico.
Quite filas innecesarias. Filtre los datos históricos que ya no son necesarios para los informes. Si los usuarios solo analizan los últimos dos años, no cargue cinco años de datos. Este es el filtrado horizontal y reduce la cardinalidad y el recuento general de filas.
Optimice los tipos de datos de columna. El motor VertiPaq usa codificación de valores para datos numéricos (altamente eficiente) y codificación hash para texto (menos eficaz). Si una columna como número de pedido se almacena como texto con un prefijo (como "SO123456"), considere la posibilidad de quitar el prefijo y almacenarlo como un número.
Sugerencia
Prefiere crear columnas calculadas en Power Query en lugar de columnas calculadas en DAX. Las columnas de Power Query son procesadas durante la carga de datos y se benefician de una compresión VertiPaq mejorada. Las columnas calculadas de DAX se evalúan después de la carga y normalmente se comprimen de forma menos eficaz.
Evaluación de ventajas y desventajas
La reducción de la cardinalidad siempre implica un equilibrio entre granularidad y rendimiento. Redondear las marcas de tiempo al nivel de día significa que no se pueden analizar patrones intradía. La agrupación por edades significa que no se puede filtrar por edades exactas. Estas decisiones deben estar controladas por los requisitos empresariales.
Plantee estas preguntas antes de reducir la cardinalidad:
- ¿Depende algún informe, segmentador o medida de este nivel de detalle?
- ¿Pueden los usuarios obtener los detalles que necesitan de una página de desglosado conectada a una tabla DirectQuery?
- ¿Se usa la columna en reglas de seguridad a nivel de fila?
Cuando la empresa requiere tanto el rendimiento de nivel de resumen como el acceso de nivel de detalle, un enfoque de modelo compuesto puede ayudar. Utilice el modo de almacenamiento de importación para los datos resumidos (consultas rápidas) y DirectQuery para el análisis a nivel de detalle (acceso bajo demanda al origen).