Problema con el manejo de relaciones muchos a muchos

 Hola,

Tengo muchas dudas con la creación de un cubo con Schema Workbench con relaciones muchos a muchos, si alguien a logrado hacerlo por favor le pido me indique como, por lo que he leido parece que no soporta este tipo de relación.

 

Gracias.

En realidad ningún cubo, ya sea de Pentaho o de otro software de BI, va a soportar directamente relaciones de muchos a muchos. Es un tema más de diseño que de tecnología. Los cubos OLAP siempre se organizan en jerarquías, y con relaciones de uno a muchos.

Te enlazo el capítulo de la metodología HEFESTO en el que se trata justamente cómo modelar en el data warehouse una relación de muchos a muchos para convertirla en relaciones de uno a varios, que sí serán compatibles con la creación de cubos OLAP con Schema Workbench, y también con otras herramientas.

Espero que te sea de ayuda,

En respuesta a por Carlos

 Gracias Carlos, si efectivamnete es como pense que sería, pero ahi es donde se produce mi problema, te explico, tengo hechos de controles y hechos de infracciones (Partes)  y cada parte tiene varios rechazos, y la relacion es la siguiente un control puede tener muchos partes (uno a muchos) y un parte puede tener muchos rechazos y un rechazo puede estar en muchos partes (muchos a muchos), por lo que entiendo segun el ejemplo deberia crear una dimension de partes y una de rechazos y unirlas con una tabla de relacion (en mi modelo de gestion ya existe de esta forma) la pregnta es se puede abordar de otra forma ya que si creo la dimension parte esta crecera considerablemente de igual forma que el hecho parte.

 

Espero me entiendas.

 

 

En respuesta a por lborbar

No veo claro porqué quieres crear una dimensión de partes y otra de rechazos, cuando por lo que comentas los partes son hechos. 

Si te he entendido bien, tendrías una tabla de hechos de controles, y otra tabla de hechos de partes, que sería como el detalle de la de controles. Como es de uno a muchos esta relación no te tiene que dar problemas.

Después, en la de partes, tienes que controlar los rechazos. ¿No te serviría bajar el nivel de agregación de la tabla de partes a partes-rechazos? Es decir, crearías en la tabla de hechos un nuevo registro por cada rechazo, con el id del rechazo enlazado con una tabla de dimensión de rechazos.

 

En respuesta a por Carlos

Hola Carlos,

Entiendo lo que me dices, en realidad los controles y los partes son un solo hecho, el primer desarrollo que se realizo acá y que actualmente existe en producción  es un solo hecho de controles y partes lo que nos llevo a duplicar los controles por cada parte que estuviese asociado y por cada rechazo que estuviese asociado al parte en el hecho, esto nos ha provocado problema en el cálculo de algunas  medidas, es por esto que decidí modificarlo separando en dos hechos (controles y partes),  en mi modelo de desarrollo existe un hecho controles y un hecho partes donde efectivamente tengo un registro por cada rechazo asociado al parte, o sea duplico mi parte_id y por cada rechazo asociado y este se asocia a la dimensión rechazo  a través de su sk, mi duda es ¿Esto está bien? o es una mala práctica duplicar registros en una tabla de hechos, la verdad es que no vi otra solución.

 

Muchas Gracias 

 

 

 

En respuesta a por lborbar

Vale, entonces si lo he entendido bien lo que has hecho es más o menos lo que yo te proponía. Yo lo veo bien, y no es una mala práctica duplicar ID's en una tabla de hechos, siempre que no estés duplicando todas las SK's o los ID's que definen el nivel de agregación de la tabla. En este caso, en realidad no estás duplicando registros, sólo añades un nivel más de agregación a la tabla. Es como si añadieras el día, para dos días podrías tener el mismo parte_id, y eso no sería un duplicado.

Lo único que has de tener en cuenta es que seguramente tendrás medidas que sumaricen o agreguen partes, y otras que sean agregados de rechazos, y si no tienes cuidado en algún informe te pueden salir datos incorrectos si, por ejemplo, sumas un indicador de partes cuando estás analizando rechazos.

 

En respuesta a por Carlos

 

 

Gracias Carlos por la ayuda, ahora tengo la seguridad de que lo que he realizado se encuentra bien, con respecto al indicador lo que busco es saber cuántos partes han utilizado un rechazo especifico (un ranking de rechazos)  y esta medida la calculo con un distinct count de los id de partes al momento de crear la medida en el PSW, así aplica para todas las otras dimensiones como por ejemplo cuantos partes se han cursado por región, por categoría de servicio, sede, responsable, etc..

 

Muy agradecido por tu ayuda.

 

 

 

 

 

Hola, Actualmente trabajo con "objetos", estos objetos son únicos y tienen sus respectivos atributos que también son únicos y tienen valores asociados a los "objetos". Los atributos asociados a los objetos son por ejemplo: tipo de objeto, clasificacion de objeto, región del objeto, etc. Con un query extraigo estos datos de una custom db (124 registros por ser 124 objetos únicos). Creé una tabla de dimensiones "DimObjetos" y con SSIS cargo los objetos y sus atributos en DimObjetos. Posteriormente con el IdObjetos de DimObjetos cargo los valores asociados a los objetos en una tabla de hechos "FactObjetos". Por último, agrego esta dimension y tabla de medidas al cubo (SSAS), creo sus relaciones (Id de DimObjetos a IdObjetos de FactObjetos) y visualizo mis datos y los filtro usando sus atributos. Sin embargo, tengo un nuevo requerimiento y un problema que es integrar compañías a los objetos. Una compañía puede tener más de un objeto asignado y viceversa. Si en el query inicial para buscar los datos en la custom db agrego las compañías ya no me trae 124 registros únicos, si no que los aumenta a 133 por ejemplo. Si el objeto 1 está asignado a 3 compañias, aparecen 3 registros del mismo objeto y repite los montos asociados a el objeto. Derivado de esto, cree la tabla compañías donde tengo Id, Compania, IdObjeto para cargar ahí las compañías y le asigno el IdObjeto proveniente de DimObjetos. Luego de esto no se cómo relacionar esto en SSAS de tal forma que mi dimension Objetos tenga las compañías agregadas. Espero no haya aburrido con este comentario, espero pueda recibir algún consejo. Saludos David

En respuesta a por DavidB (no verificado)

Hola David No sé si te he entendido bien porque no me cuadra que te represente un problema que te aumente el número de registros en la tabla de hechos al introducir las compañías. Si un objeto se relaciona con más de una compañia te puede generar más de un registro con el mismo valor, pero cuando filtres por compañía te quedarás sólo con el que toque. Si, por ejemplo, no necesitas hacer drill de 'objeto' a 'compañia', la solución más sencilla podría ser modelar DimObjetos y DimCompañias como dimensiones separadas, y simplemente relacionarlas desde la tabla de hechos con claves foráneas idObjeto e idCompañia. Si después seleccionas en el cubo una compañía te saldrán los valores de objetos de sólo esa compañia, y si no seleccionas compañia te saldrán los de los objetos de todas.