jueves, 6 de junio de 2019

Capítulo 9 - Medidas

1. Cubos



Un cubo contiene un subconjunto de la información de un Data Mart o Data Warehouse. Su información se almacena en una estructura multidimensional definida por dimensiones y medidas.

Todo cubo se construye a partir de un esquema de datos que consiste en tablas de hechos y tablas de dimensión. Una mejora importante de SSAS 2012 sobre la versión 2000 es que cada cubo puede contener múltiples sola tablas de hechos.

Cada dimensión puede contener varias jerarquías. Cada jerarquía contiene varios niveles. Los niveles permiten efectuar complejas operaciones de drill down (aumentar el nivel de detalle de las consultas) y drill up (disminuir el nivel  de detalle de las consultas).

Por ejemplo, una operación de drill down puede consistir en observar la información de ventas de manzanas en todo el Perú, y luego aumentar el nivel de detalle para consultar las ventas de Cuzco y Lima. Una operación de drill up típica consistiría en observar las ventas de Lima, y disminuir posteriormente el nivel de detalle para observar las ventas en todo el Perú.

La información se sumariza en un cubo de acuerdo a la estructura de niveles y jerarquías definida en cada dimensión. Por ejemplo, en la tabla de hechos de un cubo pueden almacenarse las ventas para cada distrito. Durante el procesamiento del cubo, se calculan y almacenan las sumas parciales de las ventas en cada provincia y departamento. Estas sumas parciales reciben el nombre de agregaciones. De esta manera, se pueden efectuar consultas rápidas sobre vastos conjuntos de datos.

1.1 Propiedades de los cubos


Los cubos tienen una serie de propiedades, configurables desde el diseñador de cubos de SQL Server Data Tools. A continuación se explican algunas de estas propiedades:

  • AggregationPrefix: Especifica el prefijo normal que se utiliza para nombres de agregación
  • Collation: Especifica el identificador de configuración regional (LCID) y la marca de comparación, separados por un carácter de subrayado. por ejemplo, Latin1_General_C1_AS.
  • DefaultMeasure: Contiene una expresión MDX (Expresiones multidimensionales) que define la medida predeterminada para el cubo. 
  • Descripción: Proporciona una descripción del cubo, que se puede mostrar en aplicaciones cliente.
  • ErrorConfiguration: Contiene valores de control de errores configurables para controlar claves duplicadas, claves desconocidas, límites de error, acciones al detectar errores, archivos de registro de errores y control de claves nulas.
  • EstimatedRows: Especifica el número de filas estimadas del cubo. 
  • ID: Contiene el identificador único (Id.) del cubo.
  • Language: Especifica el identificador de idioma predeterminado del cubo.
  • Name: Especifica el nombre descriptivo del cubo.
  • ProactiveCaching: Define la configuración de almacenamiento en caché automático para el cubo.
  • ProcessingMode: Indica si la indización y la agregación se deben producir durante o después del procesamiento. Las opciones son regular o lazy.
  • ProcessingPriority: Determina la prioridad de procesamiento del cubo durante operaciones en segundo plano, como indización y agregaciones diferidas. El valor predeterminado es 0.
  • ScriptCacheProcessingMode: Indica si la caché de script se debe generar durante o después del procesamiento. Las opciones son regular y lazy.
  • ScriptErrorHandlingMode: Determina el control de errores. Las opciones son IgnoreNone o IgnoreAll.
  • Source: Muestra la vista del origen de datos utilizada para el cubo.
  • StorageLocation: Especifica la ubicación de almacenamiento del sistema de archivos para el cubo. Si no se especifica ninguna ubicación, se hereda de la base de datos que contiene el objeto de cubo.
  • StorageMode: Especifica el modo de almacenamiento del cubo. Los valores son MOLAP, ROLAP o HOLAP.
  • Visible: Determina la visibilidad del cubo

2. Medidas y grupos de medidas

Una medida (measure) representa un valor obtenido a partir de una columna numérica de la tabla de hechos. La definición de las medidas constituye el paso central en el análisis de soluciones de inteligencia de negocios, pues constituyen la información que los usuarios finales desean visualizar.
Las medidas se agrupan en grupos de medidas (measure groups). Cada measure group corresponde con una tabla de hechos. Un cubo de SSAS 2012 puede contener varios measure groups.

2.1 Propiedades de los measure groups


Las propiedades de los grupos de medida determinan el comportamiento de todo el grupo de medida y establecen los comportamientos predeterminados de ciertas propiedades de medidas dentro de un grupo de medida.

A continuación, se explican las propiedades principales de los measure groups:
  • AggregationPrefix: Se aplica al almacenamiento ROLAP. Asigna un prefijo común a las vistas indizadas en SQL Server, que se usa para almacenar agregaciones para las particiones asociadas con este grupo de medida.
  • DataAggregation: Esta propiedad se reserva para uso futuro y actualmente no tiene ningún efecto. Por lo tanto, se recomienda que no modifique esta configuración.
  • Descripción: Puede usar esta propiedad para documentar el grupo de medida.
  • ErrorConfiguration: Valores de control de errores configurables para controlar las claves duplicadas, las claves desconocidas, las claves NULL, los límites de error, las acciones tras la detección de errores y el archivo de registro de errores.
  • EstimatedRows: Especifica el número estimado de filas de la tabla de hechos.
  • EstimatedSize: Especifica el tamaño estimado (en bytes) del grupo de medida.
  • ID: Especifica el identificador del objeto.
  • IgnoreUnrelatedDimensions: Determina si las dimensiones no relacionadas están forzadas a su nivel superior cuando los miembros de las dimensiones que no están relacionadas con el grupo de medida se incluyen en una consulta. El valor predeterminado es True.
  • Name: Nombre de la medida. Esta propiedad es de solo lectura. Por defecto, el nombre del measure group se forma a partir de la tabla de hechos correspondiente.
  • ProactiveCaching: Valores de control de errores configurables para controlar las claves duplicadas, las claves desconocidas, las claves NULL, los límites de error, las acciones tras la detección de errores y el archivo de registro de errores.
  • ProcessingMode: Indica si la indización y la agregación se deben producir durante o después del procesamiento. Las opciones son Regular y LazyAggregations. LazyAggregations puede usarse para ejecutar la agregación como una tarea en segundo plano.
  • ProcessingPriority: Determina la prioridad de procesamiento del cubo durante las operaciones de fondo, como indizaciones y agregaciones diferidas. El valor predeterminado es 0.
  • Storage location: La ubicación del almacenamiento del sistema de archivos para el grupo de medida. Si no se especifica ningún valor, la ubicación se heredará del cubo que contiene el grupo de medida.
  • StorageMode: El modo de almacenamiento del grupo de medida. Los valores disponibles son MOLAP, ROLAP u HOLAP.
  • Type: Especifica el tipo del grupo de medida.


2.2 Propiedades de las medidas


Las medidas heredan determinadas propiedades del grupo de medida del que son miembro, aunque estas propiedades se reemplazan en el nivel de medida. Las propiedades de medidas determinan cómo se agrega una medida, su tipo de datos, el nombre que se muestra al usuario, la carpeta para mostrar en la que aparecerá la medida, su cadena de formato, cualquier expresión de medida, la columna de origen subyacente y la visibilidad para los usuarios.

Las medidas poseen una serie de propiedades. A continuación, se explican algunas de ellas:

  • Name: Nombre de la medida 
  • Description: Ofrece una descripción de la medida, que se puede mostrar en aplicaciones cliente.
  • DisplayFolder: Especifica la carpeta en la que se mostrará la medida a los usuarios cuando se conecten al cubo. Cuando un cubo tiene muchas medidas, se pueden utilizar carpetas para mostrar para categorizar las medidas y mejorar la exploración para el usuario.
  • Source: Especifica la columna de la vista del origen de datos a la que se enlaza la medida.
  • Format String: Determina el formato de visualización de la medida. Analysis Services provee una serie de formatos (por ejemplo, porcentaje y moneda), y también permite ingresar una cadena de formato personalizada.
  • Id: Muestra el identificador único (Id.) de la medida. Esta propiedad es de solo lectura.
  • MeasureExpression: Especifica una expresión MDX restringida que define el valor de la medida. La expresión se evalúa en el nivel de hoja antes de agregarse, y permite la ponderación de un valor. Por ejemplo, en la conversión de moneda en que la tasa de cambio pondera un importe de ventas. 
  • Visible: Determina si la medida es visible o no. Esta propiedad es útil cuando se definen medidas intermedias, a partir de las cuales se calcularán otras medidas a través de MDX.
  • Data Type: Especifica el tipo de datos de la columna de la tabla de hechos subyacente a la que se enlaza la medida. Este valor se hereda de la columna de origen de forma predeterminada.
  • Aggregate Function: Función que se utilizará para sumarizar la medida. Analyisis Services provee las siguientes funciones de agregación:
    • SUM: Es la función de agregación por defecto. Significa que el valor de la medida para un miembro de una dimensión es igual a la suma de los valores para todos sus miembros hijos. Ejemplo: la venta del Perú es la suma de las ventas de todos sus departamentos.
    • COUNT: Recupera la cuenta de registros en la tabla de hechos. Esta función puede responder a preguntas del tipo: “¿cuántas ventas se han producido en Enero del 2005?”
    • MIN: Significa que el valor de la medida para un miembro es igual al valor mínimo encontrado entre sus miembros hijos. A través de esta función se puede saber, por ejemplo, cuál ha sido la venta más pequeña entre los distritos de Lima.
    • MAX: Significa que el valor de la medida para un miembro es igual al valor máximo encontrado entre sus miembros hijos. A través de esta función se puede saber, por ejemplo, cuál ha sido la venta más grande entre los distritos de Lima.
    • DISTINCT COUNT: Recupera la cuenta de registros en la tabla de hechos, eliminando las ocurrencias repetidas. Esta función puede responder a preguntas del tipo: “entre mis 150 clientes, ¿cuántos han efectuado compras en Enero del 2005?
    • NONE: No se efectúa ningún tipo de agregación; es decir, la medida o es aditiva. Esta función de agregación debe usarse cuando los valores de la medida no deben ser acumulados; por ejemplo, si la medida representa un promedio o el resultado de un cociente.
    • BY ACCOUNT: Agrega la medida de acuerdo con la función de agregación asignada a las dimensiones de tipo “Account”. Si el cubo no tiene dimensiones de tipo “Account”, este valor es ignorado y se trata como una función NONE.
    • AVERAGE OF CHILDREN: Significa que el valor de la medida para un miembro de una dimensión es igual al promedio de los valores para todos sus miembros hijos no vacíos.
    • FIRST CHILD: Significa que el valor de la medida para un miembro es igual al valor de la medida para su primer miembro hijo. 
    • LAST CHILD: Significa que el valor de la medida para un miembro es igual al valor de la medida para su último miembro hijo.
    • FIRST NON EMPTY: Significa que el valor de la medida para un miembro es igual al valor de la medida para su primer miembro hijo no vacío.
    • LAST NON EMPTY: Significa que el valor de la medida para un miembro es igual al valor de la medida para su último miembro hijo no vacío.


3. Relación entre las dimensiones y los grupos de medidas


El uso de la dimensión define las relaciones entre una dimensión de cubo y los grupos de medida de un cubo. Una dimensión de cubo es una instancia de una dimensión de base de datos que se utiliza en un cubo específico.

Un cubo puede y suele tener dimensiones de cubo que no están directamente relacionadas con un grupo de medida, pero que podrían estar indirectamente relacionadas con el grupo de medida a través de otra dimensión o grupo de medida.

Cuando se agrega una dimensión de base de datos o un grupo de medidas a un cubo, Microsoft SQL Server Analysis Services intenta determinar el uso de la dimensión mediante el examen de las relaciones entre las tablas de dimensiones y las tablas de hechos de la vista del origen de datos del cubo y mediante el examen de las relaciones entre los atributos de las dimensiones. Analysis Services establece automáticamente la configuración del uso de la dimensión para las relaciones que puede detectar.

Una relación entre una dimensión y un grupo de medida consta de las tablas de dimensiones y hechos que participan en la relación y un atributo de granularidad que especifica la granularidad de la dimensión del grupo de medida concreto. Comúnmente, estas relaciones se efectúan a través de columnas comunes en las tablas de dimensión y las tablas de hechos.

SSAS 2014 soporta los siguientes tipos de relaciones entre las dimensiones y los measure groups:
  • Relación regular.
  • Relación referenciada.
  • Relación “fact”.
  • Relación many – to – many.

El tipo de relación entre las dimensiones y los measure groups se determina a través del tab Dimension Usage en el diseñador de cubos.

3.1 Relación regular


Las relaciones regulares constituyen el tipo más frecuente de relación. SSAS 2014 provee soporte natural a este tipo de relaciones regulares. 

El uso de la dimensión regular define las relaciones entre una dimensión de cubo y los grupos de medida de un cubo. Hay una relación de dimensión normal entre una dimensión de cubo y un grupo de medida cuando la columna de clave (PK) de la dimensión se combina directamente con la tabla de hechos (FK).

Esta relación directa se basa en una relación de clave principal a clave externa de la base de datos relacional subyacente, pero también podría basarse en una relación lógica definida en la vista del origen de datos. Una relación de dimensión normal representa la relación entre tablas de dimensiones y una tabla de hechos en un diseño de esquema en estrella tradicional.

La siguiente figura muestra una relación de este tipo entre “DimPromotion” y “FactInternetSales”: Se muestran las características de la relación entre la dimensión “Promotion” y el measure group “Internet Sales”: 

Un caso especial lo constituye la situación denominada “Role Playing”. En ocasiones, una dimensión participa múltiples veces en el mismo cubo, desempeñando distintos roles. Esto se presenta, por ejemplo, en las siguientes ocasiones:

  • Una tabla de hechos puede contener tres columnas que lo enlacen con la dimensión de tiempo: una columna para almacenar la fecha de facturación, otra para almacenar la fecha de remisión, y otra paraalmacenar la fecha de entrega.
  • Una tabla de hechos puede contener dos columnas enlazadas con la dimensión de empleados: una columna para representar al empleado que efectuó la venta, y otra para representar al empleado que efectuó el despacho.

En versiones anteriores a SQL Server 2012, este tipo de requerimiento solo podía satisfacerse duplicando las tablas de dimensión, o creando vistas a partir de la tabla de dimensión (en los ejemplos anteriores, la solución hubiera consistido en crear tres tablas de dimensión para el tiempo y dos tablas de dimensión para los empleados; o en crear tres vistas a partir de la tabla de dimensión de tiempo y dos vistas a partir de la tabla de empleados).

En cambio, SSAS 2014 provee soporte natural a las situaciones de “Role Playing”. En SSAS 2014, la misma dimensión puede participar múltiples veces en el mismo cubo.

3.2 Relación Referenciada (referenced relationship)


Una relación de dimensión de referencia representa la relación entre tablas de dimensiones y una tabla de hechos en un diseño de esquema de copo de nieve.

Cuando las tablas de dimensiones se conectan en un esquema de copo de nieve, es posible definir una única dimensión mediante columnas de varias tablas, o bien, definir dimensiones independientes basadas en las tablas de dimensiones independientes y, a continuación, definir un vínculo entre ellas mediante la configuración de la relación de dimensión de referencia.

Este tipo de situaciones corresponde con lo que típicamente se llama “Dimensión Snowflake”.

Una relación referenciada se produce cuando la tabla de dimensión no está directamente relacionada con la tabla de hechos. En esta situación, la relación se produce a través de una tabla de dimensión intermedia, como se muestra en la figura siguiente.

3.3 Relación “Fact”


Frecuentemente, las tablas de hechos contienen, además de columnas de medidas y foreign keys, columnas adicionales que almacenan información relevante para el negocio. Por ejemplo, una tabla de hechos con información de ventas puede contener columnas que almacenen el número de factura y la dirección de envío del despacho.

Las dimensiones de hechos, más conocidas como dimensiones degeneradas, son dimensiones estándar que se crean a partir de columnas de atributos de tablas de hechos en lugar de columnas de atributos de tablas de dimensiones. Los datos útiles de dimensiones algunas veces se almacenan en una tabla de hechos para reducir la duplicación.

Por ejemplo, en el siguiente diagrama se muestra la tabla de hechos FactResellerSales de la base de datos de ejemplo Adventure Works DW Multidimensional 2014, que contienen columnas que almacenan el número de la orden de venta.



La tabla contiene información sobre atributos no solo para cada línea de un pedido emitido por un distribuidor, sino sobre el propio pedido. Esta Información es relevante para el negocio; razón por la cual es considerado en la tabla de hechos para ser relacionado con las medidas.

En este esquema la relación de cada línea de pedido con la FactResellerSales se efectuará mediante la relación con la propia tabla de hechos FactResellerSales.


3.4 Relación muchos a muchos (many - to - Many relationship) En la mayoría de dimensiones, cada hecho se combina con un solo miembro de la dimensión y un único miembro de la dimensión puede asociarse a varios hechos. En terminología de bases de datos relacionales, esto se conoce como relación de uno a varios. No obstante, suele resultar útil combinar un único hecho con varios miembros de dimensión, esto se reconoce como relación de muchos a muchos.

Por ejemplo, un cliente de un banco podría tener varias cuentas (cuenta corriente, libreta de ahorro, tarjetas de crédito y cuentas de inversión) y una cuenta también puede tener varios propietarios. La dimensión de cliente creada a partir de estas relaciones tendrá varios miembros relacionados con una única transacción de cuenta. 

SSAS 2014 provee un tipo especial de relación que permite implementar relaciones de muchos a muchos entre las tablas de hechos y las tablas de dimensión. Véase la siguiente figura:


En general, la implementación de una relación muchos – muchos requiere de los siguientes componentes representados en la figura anterior:
  • Fact Table: La tabla de hechos principal
  • Many to many dimension: La tabla de dimensión con la cual se desea relacionar la tabla de hechos principal
  • Regular Dimension: Una dimensión relacionada con la tabla de hechos principal a través de una relación regular
  • Intermediate Fact Table: Una tabla de hechos relacionada con las dos dimensiones mencionadas más arriba


Las tablas Fact Table, Regular Dimension e Intermediate Fact Table deben estar relacionadas en el data source view. De lo contrario, no se podrá definir la relación muchos – muchos.

Este tipo de situaciones en las cuales las dimensiones tienen relaciones de tipo muchos – muchos con las tablas de dimensión. Por ejemplo, véase la siguiente imagen:

La tabla “DimSalesReason” almacena motivos de venta. Como puede deducirse de la figura, la relación entre “DimSalesReason” y “FactInternetSales” es de tipo muchos – muchos: cada venta (un registro en “FactInternetSales”) puede tener múltiples motivos de venta (registros en “DimSalesReason”). Y, análogamente, cada motivo de venta puede estar relacionado con múltiples ventas.

En este diseño, la relación muchos – muchos se implementa a través de la tabla “FactInternetSalesReason”, que relaciona los registros de “FactInternetSales” con los registros de “DimSalesReason”.


















Capítulo 9 - Medidas

1. Cubos Un cubo contiene un subconjunto de la información de un Data Mart o Data Warehouse. Su información se almacena en una estr...