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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Syndicate_Admin
Administrator
Administrator

Comportamiento extraño de Power BI con la función TREATAS

Resumen:

Al trabajar con tres tablas relacionadas lógicamente en Power BI, pero donde no se pueden establecer relaciones físicas, y debemos confiar en la función TREATAS para calcular medidas, nos encontramos con un comportamiento específico:

  • No se pueden aplicar directamente dos funciones TREATAS dentro de una sola medida y esperar el contexto de filtro correcto.
  • En su lugar, debe crear una medida de cobertura que controle la relación entre el origen y la tabla intermedia mediante TREATAS y, a continuación, aplicar el cálculo final a través de esta medida.

Ejemplo detallado con escenario de cotización:

Digamos que tenemos 3 tablas:

  1. Citar
  2. CotizaciónFactura
  3. Detalle

Descripciones de las tablas:

  • Citar – Contains general quote information.
  • CotizaciónFactura – Contains multiple invoices associated with a single quote.
  • Detalle – Contains multiple invoice records based on multiple parts listed in each invoice.

Relaciones lógicas (cadena de uno a varios):

  • Quote[QuoteId] → QuoteInvoice[QuoteId]
  • QuoteInvoice[QuoteInvoiceId] → Detail[QuoteInvoiceId]

Nota: No hay relaciones físicas; El modelo solo es lógicamente correcto.

KRISHP1234_1-1746018553051.jpeg

Intento inicial (incorrecto):

Intentando calcular los ingresos de la tabla de detalles:

Total sales =  
    CALCULATE( 
        SUM(Detail[Revenue]), 
        TREATAS(VALUES(QuoteInvoice[QuoteInvoiceId]), Detail[QuoteInvoiceId]), 
        TREATAS(VALUES(Quote[QuoteId]), QuoteInvoice[QuoteId]) 
    )
  

Problema: Este enfoque no funciona correctamente cuando se trazan campos de la tabla Cotización. A pesar de que se utilizan ambas funciones TREATAS, el contexto del filtro no se propaga como se esperaba.

KRISHP1234_2-1746018578103.png

Enfoque Correcto con una Medida de Cobertura:

Para garantizar el contexto adecuado, cree una medida de cobertura para la relación entre Quote y QuoteInvoice y utilícela para impulsar el cálculo final:

-- Base measure (Detail to QuoteInvoice)
Total sales =  
    CALCULATE( 
        SUM(Detail[Revenue]), 
        TREATAS(VALUES(QuoteInvoice[QuoteInvoiceId]), Detail[QuoteInvoiceId]) 
    )

-- Final measure (Quote to QuoteInvoice, then to Detail)
Total sales (final) =  
    CALCULATE( 
        [Total sales], 
        TREATAS(VALUES(Quote[QuoteId]), QuoteInvoice[QuoteId]) 
    )
  

KRISHP1234_3-1746018602526.jpeg

¿Alguien puede explicar este comportamiento?

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hola @KRISHP1234 ,

Queríamos hacer un seguimiento amable para verificar si la solución proporcionada para el problema funcionó. o Háganos saber si necesita más ayuda.
Si nuestra respuesta fue atendida, márquela como Aceptar como solución y haga clic en Sí si le resultó útil.

Saludos
Chaithra.

Syndicate_Admin
Administrator
Administrator

Hola @KRISHP1234 ,

Queríamos hacer un seguimiento amable para verificar si la solución proporcionada para el problema funcionó. o Háganos saber si necesita más ayuda.
Si nuestra respuesta fue atendida, márquela como Aceptar como solución y haga clic en Sí si le resultó útil.

Saludos
Chaithra.

Syndicate_Admin
Administrator
Administrator

Hola @KRISHP1234 ,

Nos gustaría hacer un seguimiento para ver si la solución proporcionada por el superusuario resolvió su problema. Por favor, háganos saber si necesita más ayuda.
Si nuestra respuesta de superusuario resolvió su problema, márquela como "Aceptar como solución" y haga clic en "Sí" si le resultó útil.

Saludos
Chaithra E.

Syndicate_Admin
Administrator
Administrator

Las 2 funciones de TREATAS no se aplican secuencialmente, sino que se aplican al mismo tiempo. Lo que desea que suceda es obtener los valores del ID de factura de cotización utilizando el ID de cotización como filtro. No es necesario hacer esto en una medida separada, puede usar variables, p. ej.

Total sales =  
VAR QuoteInvoices = CALCULATETABLE(
    VALUES(QuoteInvoice[QuoteInvoiceId]),
    TREATAS(VALUES(Quote[QuoteId]), QuoteInvoice[QuoteId]) 
)
VAR Result = 
    CALCULATE( 
        SUM(Detail[Revenue]), 
        TREATAS(QuoteInvoices, Detail[QuoteInvoiceId])
    )
RETURN Result

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

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

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors