A la hora de administrar nuestro data warehouse nos puede ser muy útil saber qué patrón de consultas sigue Microsoft SQL Server Analysis Services (SSAS) al realizar sus operaciones tanto de consulta como de procesado.Microsoft SQL Server Analysis Services  nos permite asignar diferentes modos de almacenamiento a las dimensiones y grupos de medidas de nuestros cubos OLAP de tal forma que seleccionemos el más adecuado según nuestros requisitos de espacio y latencia del dato.


Aunque el objetivo de este post no es entrar en detalle en los modos de almacenamiento, vamos a nombrar y resumir brevemente los diferentes tipos que hay:

  • MOLAP (Multidimensional OLAP)
  • ROLAP (Relational OLAP)
  • HOLAP (Hybrid OLAP)

Según el modo de almacenamiento que seleccionemos para nuestras dimensiones o hechos y dependiendo de nuestro modelo, SSAS utilizará diferentes patrones de consulta que vamos ver a continuación:

Dimensiones

Almacenamiento MOLAP

  • Procesamiento

Para cada atributo de cada dimensión se lanza una consulta con el siguiente patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

Att_keycolumn, Att_namecolumn: Son las columnas especificadas como clave o como representación del atributo. Pueden ser una columna directa de una tabla, o una columna calculada con código T-SQL ( ej: “CY “ + [CalendarYear])

Att_rel_keycolumns: Son las columnas relacionadas directamente con el atributo que se esta procesando en ese momento. Puede ser directa o calculada también.

  • Consulta MDX

No hay consultas a SQL Server. Está todo almacenado en el motor OLAP y se resuelve desde allí.

 

Almacenamiento ROLAP

  • Procesamiento

No hay consultas a SQL Server. Como no hace falta guardar nada en OLAP, no se lanzan consultas.

 

  • Consulta MDX

Diferenciamos dos tipos. Si están consultando la metadata de la dimensión (ej: Cuando en Excel en el panel lateral despliegas la dimensión para ver qué atributos tiene). En este caso se lanza un “DISCOVER”, que es una consulta plana por dimensión con este patrón

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

Si por el contrario estás mostrando los miembros que tiene un atributo de una dimensión en los ejes filas/columnas (ej: que se muestren los valores de los años de la dimensión tiempo) se lanza una consulta por atributo que estas mostrando con este patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

La diferencia con la imagen de arriba es el DISTINCT.

 

Almacenamiento HOLAP

No se puede utilizar este modo de almacenamiento en dimensiones.

 

 

Hechos

Almacenamiento MOLAP

  • Procesamiento

Con medidas que tienen funciones de agregación diferentes a DistinctCount (interno de SSAS)  se lanza una consulta por partición con este patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

En este caso es opcional que exista un WHERE con una condición de partición. Si existe suele ser del tipo “WHERE fecha between X and Y”, “WHERE año=2010”, “WHERE departamento=’IT’ “, etc.

Si por el contrario, existe alguna medida que tiene la función de agregación como DistinctCount se lanza una consulta por partición con este patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

La diferencia ahora es el ORDER BY del final. Ocurre de nuevo lo del WHERE opcional con la condición de partición.

  • Consulta MDX

No hay consultas a SQL Server. Está todo en el motor OLAP y se resuelve desde allí

 

Almacenamiento ROLAP

  • Procesamiento

No hay consultas a SQL Server. Como no hace falta guardar nada en OLAP, no se consulta.

 

  • Consulta MDX

De nuevo tenemos dos casos. Si estamos consultando una medida de un grupo de medidas que no tiene ninguna medida con una función de agregación DistinctCount, se lanza una consulta por partición necesaria para lectura (aquí no es por todas las particiones) que sigue este patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

Agg_function(measure): Serían las funciones de agregación para cada medida. (Ej: SUM(VENTAS), MIN(Precio),MAX(Tasa))

Rows/Columns_attributes: Son los atributos de las dimensiones por las cuales estamos analizando y hemos puesto en los ejes de filas o columnas. (Ej: Semestre, Pais de usuario)

Además de la subconsulta con la información de la partición (y su where opcional), ésta se cruza con las dimensiones cuyos atributos estamos utilizando. Este cruce se hace mediante “WHERE hecho.key = dim.key” para cada una de las dimensiones.

Por último se hace un GROUP BY por los atributos de las dimensiones por las cuales estamos analizando.

Si por el contrario, estamos consultando una medida de un grupo de medidas que tiene alguna medida con la función de agregación como DistinctCount, se lanza una consulta por partición necesaria de lectura  con este patrón:

T-SQL Query Patterns: Patrones de consultas T-SQL que lanza Microsoft Analysis Services al procesar o consultar un cubo OLAP

La estructura es casi idéntica a la imagen superior, lo que cambia ahora es que la medida del DistinctCount es la única que no lleva función de agregación en el SELECT.

Además, el GROUP BY se hace tanto por la medida del DistinctCount como por los atributos de las dimensiones por las cuales estamos analizando y por último se termina con un ORDER BY  de la medida del DistinctCount.

 

Almacenamiento HOLAP

  • Comportamiento General

Si existe una agregación procesada que puede solucionar la consulta, se comporta como el almacenamiento MOLAP para Hechos

Si no existe una agregación procesada que puede solucionar la consulta, se comporta como el almacenamiento ROLAP para Hechos

 

Si queremos profundizar en el tema, podemos encontrar más información sobre cómo capturar las consultas o las ventajas y desventajas de los diferentes modos de almacenamiento de SSAS en varios enlaces:

Tipos de almacenamiento en Analysis Services (SSAS) por MSDN

Utilizando SQL Server Profiler para monitorizar SSAS por MSDN

Rubén Pertusa, Twitter: @rpertusa

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

Power BI on premise Vs Power BI on Cloud

Tener la funcionalidad de Power BI, pero on premise en lugar de en la nube, ha sido algo muy demandado. Por fin está en camino, cono?9e las nuevas caracteríasticas de Reposting Services para gestionar informes de Power BI, prepárate y decide qué hacer cuando salga al mercado en unos meses.
Leer más

Data Masking de datos sensibles… piénsalo dos veces

Dynamic data masking (enmascaramiento) es una técnica que busca limitar/ocultar información sensible sin requerir cambios en las aplicaciones. Los datos en la base de datos realmente no se modifican, se alteran “al vuelo” de forma que cuando las consultas devuelven resultados se aplican las máscaras apropiadas. Esto hace que esta funcionalidad sea sencilla de implementar ya que no requiere cambios sustanciales y sea bastante transparente para las aplicaciones que utilizan los datos enmascarados.