Dimensiones multivalor en Power BI

Un usuario Pregunto ✅

manmad

Oye,

Intenté buscar pero no pude encontrar una pregunta similar.

Actualmente estoy trabajando en un tablero y me encuentro con muchos problemas con dimensiones multivalor (al menos creo que ese es mi problema, no soy un experto en absoluto).

Tengo 2 tablas de hechos:

  • Registro de hechos: Cada vez que un paciente o un empleado registra algo (peso, presión arterial, pulso, … del paciente por ejemplo), creamos un hecho nuevo. El grano de esta tabla es parámetro. Entonces, cada parámetro registrado es un hecho nuevo.
  • FactCarePlanEvent: Cada vez que le sucede algo al plan de cuidados del paciente, se crea un hecho. Entonces, cuando se crea, comienza, finaliza el plan de atención, ….) El grano de esta tabla es un evento del plan de atención de un paciente.

La primera vez que encontré un problema con dimensiones multivalor fue hace unas semanas. Siempre que se realiza un registro, participa un equipo de miembros del equipo de atención. Este registro nunca puede asignarse a una persona, por lo que un hecho está vinculado a varios miembros del equipo. Power BI no puede manejar esto y sigue quejándose de no encontrar una relación válida entre los hechos y los miembros del equipo.

power bi old problem.png

Resolví este problema normalizando las tablas y creando una tabla puente que contiene los ID de todas las combinaciones observadas de FactRegistration / CareTeamMember. No soy un gran admirador de esta solución, ya que duplicó el tamaño de mi archivo PowerBI. Pero no pude encontrar una solución mejor y funciona.

Solución para dimensiones de múltiples valores

Pero ahora me he encontrado con otro problema con dimensiones multivalor y me gustaría saber la mejor manera de solucionarlo.

Problema

Como puede ver en la imagen de arriba, un FactCarePlanEvent está vinculado a múltiples CarePlanAnamnesis, que a su vez está vinculado a múltiples CodeSetTypeCodeSetItem. Esto crea una relación de muchos a muchos (con una tabla en el medio). Siempre que encuentro 3 tablas con cardionalidades como esta, ya no puedo usarlas en un informe. Power BI no puede determinar un vínculo entre CarePlanAnamnesis y FactCarePlanEvent, por ejemplo. Así es como se vincula en el almacén de datos, por lo que ahora tengo que encontrar una manera de transformar los datos.

Intenté buscar una solución, pero no pude encontrar una que pudiera usar. Puedo intentar desnormalizar CarePlanAnamnesis, pero el problema sigue existiendo entre FactCarePlanEvent y CarePlanAnamnesis.

Estos son algunos de los enlaces más útiles que encontré en caso de que puedan ayudar:

  • http://www.sfdama.org/Presentations/2015/DAMA%20Day%202015/Many%20to%20Many.pdf
  • http: //www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimens …
  • http: //stackoverflow.com/questions/21244660/data-warehouse-design-dimension-row-with-multiple-attrib …
  • https://dwbi1.wordpress.com/2011/03/13/dimensions-with-multi-valued-attributes/

¿Alguien más ha encontrado este problema antes y conoce la mejor manera de solucionarlo? La única solución que se me ocurre actualmente es desnormalizar CarePlanAnamnesis y luego convertir la tabla de grupo en una tabla puente con todas las combinaciones posibles de ID de CarePlanAnamnesis y ID de FactCarePlanEvent. (Como hice la primera vez con los miembros del grupo). Pero no estoy seguro de si funcionará en este escenario, y hará que mi archivo de Power BI sea aún más grande)

Gracias por adelantado,

Simón

En respuesta a manmad

Hola @manmad,

Como la relación entre dos tablas en un objeto visual de tabla es N: N, no puede mostrar todos los registros de detalles. Puede configurar el uso de StringValue Contar función agregada. O cree una medida como la siguiente. Consulte el archivo .pbix adjunto.

Cadena = CONCATENATEX (FILTRO (CarePlanAnamnesis, ‘CarePlanAnamnesis'[StringValue]<> EN BLANCO ()),[StringValue]& «,»)

Atentamente,
Qiuyun Yu


Como puede ver en la imagen de arriba, un FactCarePlanEvent está vinculado a múltiples CarePlanAnamnesis, que a su vez está vinculado a múltiples CodeSetTypeCodeSetItem. Esto crea una relación de muchos a muchos (con una tabla en el medio). Siempre que encuentro 3 tablas con cardionalidades como esta, ya no puedo usarlas en un informe. Power BI no puede determinar un vínculo entre CarePlanAnamnesis y FactCarePlanEvent, por ejemplo. Así es como se vincula en el almacén de datos, por lo que ahora tengo que encontrar una manera de transformar los datos.


Hola @manmad,

¿Puede compartir algunos datos de muestra sobre las tablas FactCarePlanEvent, DimCarePlanAnamnesis, CarePlanAnamnesis, DimAnamnesisParameter, CodeSetTypeCodeSetItem? Como mencionaste «Siempre que encuentro 3 tablas con cardionalidades como esta, ya no puedo usarlas en un informe», ¿podrías explicar cómo quieres crear un informe?

Atentamente,
Qiuyun Yu

manmad

En respuesta a v-qiuyu-msft

Hola @ v-qiuyu-msft,

¡Feliz año nuevo!

Supuse que estabas fuera durante las vacaciones, así que no quería molestarte. Pero me pregunto si ya encontraste tiempo para analizar mi problema. Espero que mi explicación haya sido lo suficientemente clara, también proporcioné algunos datos de demostración en mi respuesta como lo solicitó.

No quiero ser entrometido, pero solo quiero asegurarme de que no me hayas olvidado. Smiley feliz

Saludos cordiales y gracias de antemano,

Simón

manmad

En respuesta a v-qiuyu-msft

Hola @ v-qiuyu-msft,

Gracias por interesarse en mi pregunta.

En el enlace siguiente, puede encontrar un archivo .pbix de muestra. Eliminé la segunda tabla de hechos y todas sus dimensiones para simplificar el modelo.

También hice algunas visualizaciones en el informe para mostrarles lo que me gustaría hacer.

https: //aenv-my.sharepoint.com/personal/simon_martens_ae_be/_layouts/15/guestaccess.aspx? docid = 0d00c …


Como mencionaste «Siempre que encuentro 3 tablas con cardionalidades como esta, ya no puedo usarlas en un informe», ¿podrías explicar cómo quieres crear un informe?

ProblemaProblema

Agregué un ejemplo en mi archivo de muestra.

Este problema ocurre siempre que las tablas están vinculadas como en el ejemplo anterior. Si trato de hacer una tabla o matriz en mi tablero, que contiene un atributo de mi tabla de hechos y uno de la dimensión (en este ejemplo, FactRegistration y DimCareTeamMember).

Me di cuenta de que esto funciona si agrego un atributo de la tabla de hechos y un número de la tabla de dimensiones. Pero no lo hace si el atributo de la tabla de dimensiones es una cadena u otra cosa.

Actualmente lo arreglé en este ejemplo usando la solución a continuación, fusioné las tablas detrás de la tabla DimCareTeamMember y agregué una tabla puente que contiene las identificaciones de la tabla de dimensiones y de hechos.
Entonces, cuando las tablas están vinculadas de esta manera, no hay problema para crear las visualizaciones que quiero
.

SoluciónSolución

Espero haber sido lo suficientemente claro. Si no lo estuve, no dudes en hacer más preguntas o hacerme aportes.

Muchas gracias,

Simón

En respuesta a manmad

Hola @manmad,

Como la relación entre dos tablas en un objeto visual de tabla es N: N, no puede mostrar todos los registros de detalles. Puede configurar el uso de StringValue Contar función agregada. O cree una medida como la siguiente. Consulte el archivo .pbix adjunto.

Cadena = CONCATENATEX (FILTRO (CarePlanAnamnesis, ‘CarePlanAnamnesis'[StringValue]<> EN BLANCO ()),[StringValue]& «,»)

Atentamente,
Qiuyun Yu

manmad

En respuesta a v-qiuyu-msft

* Editar *: volví a ver mi problema y descubrí que el problema no era con la medida, sino con los valores que elijo para mi tabla. En lugar de usar la identificación de DimPatient, usé accidentalmente la identificación del paciente de mi tabla de hechos.

¡Ahora parece estar funcionando! ¡Muchas gracias!

Respuesta original:

Hola @ v-qiuyu-msft,

¡Gracias por su rápida respuesta! Tu respuesta ya es un gran paso hacia la derecha dirección, pero todavía tiene un problema.

Intenté resolverlo hoy, pero no tengo mucha experiencia con DAX y aún no he encontrado una solución. Como puede ver en las capturas de pantalla de los datos a continuación, PatientSK = 1 solo está vinculado con «Nierfalen».

image.png

Pero si miras el informe, muestra todas las posibles enfermedades.

image.png

Su respuesta debería funcionar si busco en Internet pero lo he intentado sin éxito.

http://www.powerpivot-info.com/post/1499-concatenatex—dax-function-in-excel-2016

Esto da resultados ligeramente diferentes en comparación con su código, pero sigue brindando todas las combinaciones posibles.

Mi código:

NameUpdate2 = CONCATENATEX( VALUES(SufferedDisease[Name]), [Name], "," ) 

Tu codigo:

NameUpdate = CONCATENATEX(values(SufferedDisease),SufferedDisease[Name],",")

Deja un comentario

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