Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Medidas en matriz compuesta por múltiples conjuntos de datos

Hola a todos,

He estado buscando una respuesta a un problema de matriz que he estado teniendo, pero no puedo encontrar una situación similar a la que estoy y esperaba tener una idea del problema.

Descargo de responsabilidad rápido, sé que las medidas en matrices y el uso de múltiples conjuntos de datos en un visual pueden ser complicados, así que siéntase libre de criticar mi enfoque y ofrecer mejores soluciones en esos aspectos.

El problema:

Supongamos que tengo tres conjuntos de datos, llamémoslos "Proyectos", "Asignaciones" y "Elementos". Cada uno de ellos tiene una relación 1:* entre sí, en ese orden. Por lo tanto, un proyecto puede tener varias asignaciones y una asignación puede tener varios elementos.

Debo mencionar, en caso de que sea relevante, que para Asignaciones y Elementos estoy haciendo un poco de trabajo DAX con funciones PATH para determinar los hieraches padre/hijo, ya que detrás de escena ambos calcularon a partir del mismo conjunto de datos original, pero los separé con tablas calculadas. Sin embargo, he probado mis casos descritos a continuación con solo dos conjuntos de datos que no usan ningún trabajo de PATH, y todavía tengo problemas.

MLorenzen_0-1649279859247.png

Mi pregunta proviene del uso de medidas que agregan campos del conjunto de datos Items en una matriz donde los encabezados de fila son campos de Project -> Assignment -> Item (en ese orden).

Ejemplo:

Proyecto (encabezado de fila)Asignación (encabezado de fila)Elemento (encabezado de fila)Suma calculada (valor)etc. (Valores)
1AX100...
1AY150...
1BZ25...
2CZZZ1000...

Al usar ciertas medidas para los valores, he notado que los resultados se vuelven absurdos, por lo que la matriz informa relaciones que definitivamente puedo decir que no deberían existir. Por ejemplo, refiriéndose a la matriz anterior, vería una fila para project 1 -> Asignación A -> el elemento Z, lo que no tiene sentido ya que el elemento Z no está asociado a esa asignación. ¡Esto continúa para cada Proyecto en la matriz, teniendo cada Asignación listada en cada Proyecto, y cada Elemento listado bajo cada Asignación!

A continuación se muestra un ejemplo de una medida que causa este escenario:

Medida = IF(SUM(Items[FieldA]) = 0, 0, SUM(Items[FieldB]) / SUM(Items[FieldA]))

Sin embargo, reescribir eso como lo siguiente hace que la matriz funcione como me imagino que debería:

Medida = DIVIDE(SUMA(Elementos[CampoB]), SUMA(Elementos[CampoA]), 0)

También me he topado con ese mismo cruce de datos al hacer algo simple como la siguiente medida:

Medida = "Texto literal"

¿Alguien tiene alguna idea de por qué está sucediendo esto? Me pregunto si tal vez no soy consciente de algún comportamiento de medida o si el enfoque es defectuoso a nivel de modelado.

¡Gracias de antemano por cualquier ayuda en esto!

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@DataInsights, gracias por la respuesta y la perspicacia! DIVIDE definitivamente se siente más seguro ya que el tercer parámetro cubre todas las bases.

Sin embargo, ¿por qué ocurre esa extraña explosión de datos cuando se usa una medida que solo evalúa el texto literal?

Por ejemplo, que la medida simplemente devolviera "Texto" causó el problema que estaba describiendo. ¿Por qué sería eso, y hay alguna manera de evitarlo?

Pregunto porque estoy tratando de hacer algo inteligente para implementar un enlace URL en los valores de la matriz (lo que sé que es difícil de hacer) pero que el texto no aparezca en ningún total. Puedo describir esto más si es necesario, pero independientemente del comportamiento de la matriz con la medida simple es confuso para mí.

@MLorenzen,

Creo que la explosión de datos se debe al modelo de datos. Observe lo que sucede cuando uso Items[ID de asignación] en la matriz usando su medida original:

DataInsights_0-1649707108731.png

DataInsights_1-1649707120341.png

Las combinaciones inexistentes como 1-A-ZZZ desaparecen como resultado de no utilizar la tabla intermedia Asignaciones. Power BI funciona mejor con un esquema en estrella (tablas de hechos y dimensiones). Hay muchos artículos excelentes sobre este tema.

Con respecto a la URL, puede usar HASONEVALUE para determinar si una fila es una fila total (y, por lo tanto, no mostrar la URL).

Syndicate_Admin
Administrator
Administrator

@MLorenzen,

Este comportamiento se debe a la forma en que el motor maneja 0 y BLANK. Consulte el artículo a continuación para obtener una explicación detallada:

https://dax.guide/op/strictly-equal-to/

A continuación se muestra una ilustración con el modelo de datos. Recomiendo usar la tercera medida (DIVIDE), ya que evita combinaciones inexistentes y maneja la división por 0.

Datos:

DataInsights_0-1649425591260.png

Medidas:

Measure (IF equal) = 
IF (
    SUM ( Items[FieldA] ) = 0,
    0,
    SUM ( Items[FieldB] ) / SUM ( Items[FieldA] )
)
Measure (IF strictly equal) = 
IF (
    SUM ( Items[FieldA] ) == 0,
    0,
    SUM ( Items[FieldB] ) / SUM ( Items[FieldA] )
)
Measure (DIVIDE) = DIVIDE ( SUM ( Items[FieldB] ), SUM ( Items[FieldA] ), 0 )

Resultado:

DataInsights_1-1649425676337.png

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors