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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo puedo crear una medida que se segmente en dimensiones de tabla indirectas?

Imagínate esto:

  • Tengo 3 mesas; 1 tabla de dimensiones de producto, 1 tabla de dimensiones de cliente y 1 tabla de datos de ventas.
  • Tanto la tabla Product como la Customer tienen una relación unidireccional con la tabla Sales, lo que significa que están filtrando la tabla Sales y no al revés.
  • No existe una relación directa entre la tabla Producto y Cliente.

asgerlarsen_0-1697531021890.png

Imagen para ilustración, no es en realidad mi modelo de datos.


Quiero crear una medida que cuente el número de sociedades de cartera, una dimensión con menor granularidad que la dimensión customer_key.

Estos son los problemas:

  • Dado que las tablas Product y Customer no se filtran entre sí, la medida anterior no se dividirá correctamente en el contex de las dimensiones de la tabla Product y terminará mostrando el recuento total de empresas de cartera.
  • La tabla de ventas contiene miles de millones de filas, debido a esto, tengo que usar el modo de consulta directa o el modo de almacenamiento mixto.
  • La creación de columnas calculadas en la tabla de hechos reducirá drásticamente el rendimiento del informe, por lo que quiero evitar hacer esto.
  • Además, quiero evitar el uso de relaciones bidireccionales, ya que esto también tendrá un impacto inmenso en el rendimiento.

Bajo estas restricciones, ¿es posible escribir la medida de recuento de sociedades de cartera que cortará correctamente las dimensiones del producto?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

He probado la función CROSSFILTER() y el rendimiento no parece tan malo como temía, así que daré por resuelto este problema por ahora.

Utilicé la misma forma que ilustra la guía de relaciones bidireccionales:

Count of Holding Companies =
CALCULATE(
    DISTINCTCOUNT(Customer[Holding Company]),
    CROSSFILTER(
        Customer[CustomerId],
        Sales[CustomerId],
        BOTH
    )
)

De esta manera, cuando la tabla Product filtre la tabla Sales, también filtrará la tabla Customer en la medida.

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Hice algunas pruebas, ¡y parece que el 'patrón relacionado' funcionó el doble de bien en mi senario!

Después de borrar cashe en el archivo de escritorio, ejecuté el analizador de rendimiento y obtuve estos dos resultados:

asgerlarsen_0-1697540091280.png


El 'Patrón relacionado' utiliza su sugestión de SUMMARIZE junto con SUMX:

Count of Holding Companies =
VAR HoldingCompaniesFromSales =
    SUMMARIZE ( Sales, Customer[Holding Company] )
VAR Result =
    SUMX ( HoldingCompaniesFromSales, 1 )
RETURN
    Result

Mientras que el 'Crossfilter' utiliza la función CROSSFILTER:

Count of Holding Companies =
CALCULATE(
    DISTINCTCOUNT(Customer[Holding Company]),
    CROSSFILTER(
        Customer[CustomerId],
        Sales[CustomerId],
        BOTH
    )
)

He marcado su sugerencia como la solución.

Syndicate_Admin
Administrator
Administrator

Sería interesante comparar el patrón de "conteo distinto relacionado" aquí.

Debería ser lógicamente equivalente a su medida, pero me interesaría saber cómo se compara el rendimiento.

En este caso sería:

Count of Holding Companies =
VAR HoldingCompaniesFromSales =
    SUMMARIZE ( Sales, Customer[Holding Company] )
VAR Result =
    SUMX ( HoldingCompaniesFromSales, 1 )
RETURN
    Result

Syndicate_Admin
Administrator
Administrator

He probado la función CROSSFILTER() y el rendimiento no parece tan malo como temía, así que daré por resuelto este problema por ahora.

Utilicé la misma forma que ilustra la guía de relaciones bidireccionales:

Count of Holding Companies =
CALCULATE(
    DISTINCTCOUNT(Customer[Holding Company]),
    CROSSFILTER(
        Customer[CustomerId],
        Sales[CustomerId],
        BOTH
    )
)

De esta manera, cuando la tabla Product filtre la tabla Sales, también filtrará la tabla Customer en la medida.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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