Definir una relación de varios a varios y las propiedades de las relaciones de varios a varios
Actualización: septiembre de 2013
En este tema se explican las dimensiones varios a varios de Analysis Services, incluido cuándo usarlas y cómo crearlas.
Introducción
Analysis Services admite dimensiones varios a varios, lo que permite realizar análisis más complejos que los que se pueden describir en un esquema de estrella clásico. En un esquema de estrella clásico, todas las dimensiones tienen una relación uno a varios con un tabla de hechos. Cada hecho se combina con un miembro de dimensión; un único miembro de dimensión está asociado a varios hechos.
La relación de varios a varios elimina esta restricción de modelado al permitir que un hecho (como el saldo de una cuenta) se asocie a varios miembros de la misma dimensión (el saldo de una cuenta conjunta se puede atribuir a dos o más propietarios de una cuenta conjunta).
Conceptualmente, una relación dimensional de varios a varios en Analysis Services es equivalente a las relaciones de varios a varios de un modelo relacional y admite los mismos tipos de escenarios. He aquí algunos ejemplos de relaciones de varios a varios:
Los alumnos se inscriben en varios cursos; cada curso tiene varios alumnos.
Los médicos tienen varios pacientes; los pacientes tienen varios médicos.
Los clientes tienen varias cuentas bancarias; las cuentas bancarias pueden pertenecer a más de un cliente.
En Adventure Works, varios clientes tienen varias razones para pedir un producto, y un motivo de venta puede estar asociado a varios pedidos.
Analíticamente, el problema que resuelve una relación de varios a varios es una representación exacta de un recuento o una suma con respecto a la relación dimensional (eliminando normalmente los dobles recuentos al realizar cálculos para un miembro de dimensión determinado). Es necesario ver un ejemplo para aclarar este concepto. Imagine un producto o un servicio que pertenece a más de una categoría. Si estuviera contando el número de servicios por categoría, querría que un servicio que pertenezca a ambas categorías se incluyera en todas las categorías. Al mismo tiempo, no querría exagerar el número de servicios que proporciona. Al especificar la relación dimensional de varios a varios, es más probable que obtenga los resultados correctos al consultar por categoría o por servicio. Sin embargo, siempre es necesario realizar pruebas exhaustivas para asegurarse de que este es el caso.
Estructuralmente, la creación de una relación dimensional de varios a varios es similar a la creación de una relación de varios a varios en un modelo de datos relacionales. Mientras que un modelo relacional emplea una tabla de unión para almacenar las asociaciones de filas, un modelo multidimensional utiliza un grupo de medida intermedio. El grupo de medida intermedio es el término que usamos para referirnos a una tabla que asigna miembros de distintas dimensiones.
Visualmente, una relación dimensional de varios a varios no se indica en un diagrama de cubo. En su lugar, usa la pestaña Uso de dimensiones para identificar rápidamente cualquier relación de varios a varios de un modelo. Una relación de varios a varios se indica mediante el icono siguiente.
Haga clic en el botón para abrir el cuadro de diálogo Definir relación con el fin de comprobar que el tipo de relación es varios a varios y ver qué grupo de medida intermedio se emplea en la relación.
En secciones posteriores aprenderá a configurar una dimensión varios a varios y probar los comportamientos del modelo. Si prefiere ver información adicional o seguir algún tutorial primero, vea Más información al final de este artículo.
Crear una dimensión varios a varios
Una relación de varios a varios sencilla incluye dos dimensiones que tienen una cardinalidad varios a varios, un grupo de medida intermedio para almacenar asociaciones de miembros y un grupo de medida de hechos que contiene datos que se pueden medir, como una suma de ventas totales o el saldo de una cuenta bancaria.
Las dimensiones de una relación de varios a varios pueden tener tablas correspondientes en la vista del origen de datos, donde cada dimensión del modelo se basa en una tabla existente en un origen de datos. Por el contrario, las dimensiones del modelo pueden derivar de menos tablas físicas o de tablas físicas diferentes de la vista del origen de datos. Usando Razones de venta y Pedidos de venta como ejemplo, el cubo de ejemplo de Adventure Works muestra una relación de varios a varios que usa dimensiones que existen como estructuras de datos solo del modelo, sin homólogos físicos en la vista del origen de datos. La dimensión Pedidos de venta se basa en una tabla de hechos, no en una tabla de dimensiones, del origen de datos subyacente.
En el procedimiento siguiente se da por supuesto que ya sabe qué entidades participan en la relación de varios a varios. Vea Más información si desea más información al respecto.
Con el fin de ilustrar los pasos necesarios para crear una relación de varios a varios, en este procedimiento se vuelve a crear una de las relaciones de varios a varios del cubo de ejemplo de Adventure Works. Si tiene el origen de datos (es decir, el almacenamiento de datos de ejemplo Adventure Works) instalado en una instancia de un motor de base de datos relacional, puede seguir estos pasos.
Paso 1: comprobar las relaciones de la vista del origen de datos
En SQL Server Data Tools, en un proyecto multidimensional, cree un origen de datos en el almacenamiento de datos relacional Adventure Works DW 2012, hospedado en una instancia de Motor de base de datos de SQL Server.
Cree una vista del origen de datos con las siguientes tablas existentes:
FactInternetSales
FactInternetSalesReason
DimSalesReason
Compruebe que todas las tablas que piensa usar en las relaciones de varios a varios están relacionadas en la vista del origen de datos mediante relaciones de clave principal. Esto es obligatorio para poder establecer un vínculo al grupo de medida intermedio en un paso posterior.
[!NOTA]
Si el origen de datos subyacente no proporciona relaciones de clave principal y externa, puede crear las relaciones manualmente en la vista del origen de datos. Para obtener más información, vea Definir relaciones lógicas en una vista del origen de datos (Analysis Services).
El ejemplo siguiente confirma que las tablas utilizadas en este procedimiento están vinculadas mediante claves principales.
Paso 2: crear dimensiones y grupos de medida
En SQL Server Data Tools, en un proyecto multidimensional, haga clic con el botón secundario en Dimensiones y seleccione Nueva dimensión.
Cree una nueva dimensión basada en la tabla existente DimSalesReason. Acepte todos los valores predeterminados al especificar el origen.
En los atributos, selecciónelos todos.
Cree una segunda dimensión basada en la tabla existente Fact Internet Sales. Aunque se trata de una tabla de hechos, contiene información de Pedido de venta. La usaremos para crear una dimensión Sales Order.
En Especificar información de origen, verá una advertencia que indica que se debe especificar una columna Nombre. Elija SalesOrderNumber como Nombre.
En la página siguiente del asistente, elija los atributos. En este ejemplo, puede seleccionar simplemente SalesOrderNumber.
Cambie el nombre de la dimensión a Dim Sales Orders para que tenga una convención de nomenclatura coherente para las dimensiones.
Haga clic con el botón secundario en Cubos y seleccione Nuevo cubo.
En Tablas de grupo de medida, elija FactInternetSales y FactInternetSalesReason.
Va a elegir FactInternetSales porque contiene las medidas que desea utilizar en el cubo. Va a elegir FactInternetSalesReason porque es el grupo de medida intermedio que proporciona datos de asociación de miembros que relaciona los pedidos de venta con las razones de venta.
Elija medidas para cada tabla de hechos.
Para simplificar el modelo, borre todas las medidas, y seleccione solamente Sales Amount y Fact Internet Sales Count en la parte inferior de la lista. FactInternetSalesReason solo tiene una medida, por lo que se selecciona automáticamente.
En la lista de dimensiones debe ver Dim Sales Reason y Dim Sales Orders.
En la página Seleccionar nuevas dimensiones, el asistente le preguntará si desea crear una nueva dimensión para Fact Internet Sales Dimension. No necesita esta dimensión, por lo que puede quitarla de la lista.
Asigne nombre al cubo y haga clic en Finalizar.
Paso 3: definir la relación de varios a varios
En el Diseñador de cubos, haga clic en la pestaña Uso de dimensiones. Observe que ya hay una relación de varios a varios entre Dim Sales Reason y Fact Internet Sales. Recuerde que el icono siguiente indica una relación de varios a varios.
Haga clic en la celda que es la intersección entre Dim Sales Reason y Fact Internet Sales, y haga clic en el botón para abrir el cuadro de diálogo Definir relación.
Puede ver que este cuadro de diálogo se usa para especificar una relación de varios a varios. Si fuera a agregar en su lugar dimensiones que tuvieran una relación normal, usaría este cuadro de diálogo para cambiarla a una relación de varios a varios.
Implemente el proyecto en una instancia multidimensional de Analysis Services. En el paso siguiente, examinará el cubo en Excel para comprobar sus comportamientos.
Probar relaciones de varios a varios
Cuando se define una relación de varios a varios en un cubo, es obligatorio asegurarse de que las consultas devuelven los resultados esperados. Debe probar el cubo con la herramienta de la aplicación cliente que usarán los usuarios finales. En el procedimiento siguiente, usará Excel para conectarse al cubo y comprobar los resultados de la consulta.
Examinar el cubo en Excel
Implemente el proyecto y examine el cubo para confirmar que las agregaciones son válidas.
En Excel, haga clic en Datos. | De otros orígenes | De Analysis Services. Especifique el nombre del servidor, y elija la base de datos y el cubo.
Cree una tabla dinámica que use lo siguiente:
Sales Amount como Valor
Sales Reason Name en Columnas
Sales Order Number en Filas
Analice los resultados. Como estamos usando datos de ejemplo, la impresión inicial es que todos los pedidos de ventas tienen valores idénticos. Sin embargo, si se desplaza hacia abajo, empieza a ver variaciones en los datos.
Un poco hacia abajo puede ver el importe y las razones de ventas del pedido número SO5382. El total general de este pedido concreto es 539,99, y entre las razones de compra atribuidas a este pedido se incluyen Promotion, Other y Price.
Observe que el importe de Sales Amount se ha calculado correctamente para el pedido; es 539,99 para todo el pedido. Aunque se indica 539,99 para todas las razones, ese valor no se ha sumado para las tres razones, lo que infla erróneamente nuestro total general.
En primer lugar, ¿por qué incluir un importe de ventas bajo cada razón de venta? La respuesta es que nos permite identificar el importe de ventas que podemos atribuir a cada razón.
Desplácese hasta el final de la hoja de cálculo. Ahora es fácil ver que el precio es la razón más importante de las compras de los clientes con respecto a las demás razones y al total general.
Sugerencias para controlar resultados inesperados de la consulta
Oculte las medidas del grupo de medida intermedio, como el recuento, que no devuelvan resultados significativos en una consulta. Esto impide que la gente intente usar agregaciones que produzcan datos sin sentido. Para ocultar una medida, establezca Visibilidad en False en el atributo del Diseñador de dimensiones.
Cree perspectivas para usar un subconjunto de medidas y dimensiones que admitan la experiencia de análisis que desea proporcionar. Puede que un cubo que contiene muchos grupos de medidas y dimensiones no sea adecuado en todos los casos. Al aislar las dimensiones y los grupos de medida que piensa usar conjuntamente, se asegura de obtener un resultado más predecible.
Recuerde siempre realizar la implementación y volver a conectarse después de cambiar un modelo. En Excel, use el botón Actualizar de la cinta Analizar tabla dinámica.
Evite el uso de grupos de medida vinculada en varias relaciones varios a varios, especialmente cuando esas relaciones están en cubos diferentes. Si se hace, pueden producirse agregaciones ambiguas. Para obtener más información, vea Cantidades incorrectas para medidas vinculadas en cubos que contienen relaciones varios a varios.
Más información
Use los vínculos siguientes para obtener información adicional que le ayude a dominar estos conceptos.
Definir una dimensión varios a varios en Analysis Services
La revolución varios a varios 2.0
Tutorial: Ejemplo de dimensiones varios a varios para SQL Server Analysis Services