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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Creación de una medida basada en la relación entre dos columnas diferentes y otra tabla

Tengo mis datos estructurados como se muestra a continuación en una tabla contractProducts, que proporciona cada combinación de contrato y producto, así como el producto anterior para cada contrato (cada contrato puede tener más de un producto).

contract_idproduct_idprevious_product_id
111
221
233
332
413
531
623
612
733
811
912
923
1031

También tengo una tabla de beneficios del producto (abajo), que muestra todos los beneficios seleccionados para cada producto.

product_idbenefit_name
1piernas
1armas
1cabeza
1Atrás
2piernas
2armas
2manos
2pies
3piernas
3manos
3ojos
3riñón izquierdo

Estos tienen una relación de muchos-muchos entre ellos en función del ID del producto en cada uno, me encantaría poder refactorizarlo o de alguna manera dividirlo todo en un modelo mucho más sensato, pero debido al sistema con el que estoy trabajando y cómo se estructuran y adjuntan los beneficios a la información del producto, eso no es factible (lo he intentado, pero esto es lo más cercano que hay, En pocas palabras, no es realmente posible hacer una lista única de beneficios y/o productos de una manera que mantenga la información correcta).

Lo que quiero en Power Bi es una matriz que muestre cada contrato, que pueda expandirse para mostrar todos los beneficios de su producto actual, y verificar si cada beneficio es nuevo (basado en el ID del producto anterior) (la imagen a continuación, como una imagen para que sea más fácil ver cómo funciona la matriz, no será completamente igual a los datos anteriores):

ajc96_0-1726669608370.png

Esencialmente, quiero una medida que encuentre:

Para cada contrato

Para cada producto que tienen

Por cada beneficio de ese producto

Compruebe si ese beneficio existe en su producto anterior y devuelva sí/no
Comencé con una medida usando SELECTEDVALUE() para encontrar el ID del producto, el ID del producto anterior y el nombre del beneficio específico, defino cada uno como una variable en la medida para reutilizarla más adelante. Cuando pruebo cada uno de estos valores en una matriz, todos salen correctamente junto con el contrato/producto/beneficios correctos (es decir, devuelvo cada SELECTEDVALUE() por separado y los muestro en la matriz, los valores son correctos).
Ahí es donde empieza a no funcionar correctamente. He probado muchas opciones (TREATAS, CONTAINS, FILTER, CALCULATETABLE, etc.) pero nada parece querer darme lo que espero. Me las arreglé para llegar a mitad de camino con GENERATE, generando una tabla a partir del producto contratado y una versión filtrada de los beneficios solo al valor SELECTEDdel previous_product_id, si COUNTROWS en esto me da el número correcto para el producto anterior, pero cada vez que intento aplicar también un filtro para el beneficio específico en esa tabla generada, o comprobar si contiene el valor en el que se equivoca (errores, tablas en blanco o una expansión masiva en la que muestra todos y cada uno de los beneficios, con la mayoría de ellos en blanco y solo los beneficios del producto anterior rellenados).
Gracias de antemano por cualquier sugerencia.
1 REPLY 1
Syndicate_Admin
Administrator
Administrator

Hola @ajc96 -Compare el beneficio actual con los beneficios del producto anterior utilizando CONTAINS o una función DAX similar.

Crear medida:

IsNewBenefit =
VAR currentProductID = SELECTEDVALUE(contractProducts[product_id])
VAR anteriorProductID = SELECTEDVALUE(contractProducts[previous_product_id])
VAR currentBenefit = SELECTEDVALUE(productBenefits[benefit_name])

-- Obtenga los beneficios del producto anterior
VAR anteriorProductoBeneficios =
CALCULATETABLE(
VALUES(productBenefits[benefit_name]),
productBenefits[product_id] = previousProductID
)

-- Comprobar si el beneficio actual existe en los beneficios del producto anterior
El VAR esNuevoBeneficio =
SI(
NO CONTIENE(anteriorProductoBeneficios, productoBeneficios[benefit_name], currentBenefici),
"Sí", -- El beneficio es nuevo
"No" -- El beneficio existe en el producto anterior
)

RETURN isNewBenefit

Hágamelo saber si esto funciona para su configuración, si corresponde, comparta más referencias y detalles.

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!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors