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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

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
Sept PBI Carousel

Power BI Monthly Update - September 2024

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

September Hackathon Carousel

Microsoft Fabric & AI Learning Hackathon

Learn from experts, get hands-on experience, and win awesome prizes.

Sept NL Carousel

Fabric Community Update - September 2024

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

Top Solution Authors