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

Level up your Power BI skills this month - build one visual each week and tell better stories with data! Get started

Reply
Syndicate_Admin
Administrator
Administrator

Cómo usar el filtro basado en las últimas transacciones x

Hola a todos

Estoy tratando de escribir la lógica en PowerBI para devolver un resultado basado en las últimas transacciones x(5) de todos los proveedores. este resultado debería decirme si los proveedores me han estado contabilizando el mismo precio o no. Sé cómo usar un filtro de fecha para el mes actual o x días anteriores. Pero en este caso, no sé cómo filtrar mi medida para comprobar las últimas 5 transacciones. Esto tiene que hacerse para todos los proveedores (en mi conjunto de datos tengo cientos).

Este es mi conjunto de datos de ejemplo. Debajo mostraré mi resultado esperado:

SupplierNameInvoiceIDSamePrice True/FalsePaymentDate
AmazonA-10Verdad31-12-2020
AmazonAA-10Verdad1-1-2021
Amazon A-23Verdad2-1-2021
AmazonA-11Verdad4-1-2021
AmazonA-13Verdad5-1-2021
AmazonAA-290Verdad7-1-2021
AmazonA-5Verdad7-1-2021
EbayE-1Verdad4-1-2021
EbayE-2Falso5-1-2021
EbayEE-1Verdad6-1-2021
EbayE-31Verdad8-1-2021
EbayE-9Verdad12-1-2021
EbayE-111Verdad13-1-2021
WallmartW-4Verdad5-1-2021
WallmartW-5Verdad5-1-2021
WallmartW-6Verdad6-1-2021
WallmartW-9Verdad9-1-2021

Resultado esperado

ProveedoresTotal de TransaccionesSamePriceLast(5)Transacciones
Amazon7Verdad
Ebay6Falso
Wallmart4False (porque es necesario realizar 5 transacciones)

Gracias amablemente por su tiempo.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

No @DeBIe,

Puede utilizar el siguiente método para satisfacer sus necesidades:

Paso 1: Agregue una columna de índice:

v-xulin-mstf_0-1610704523944.png

Paso 2: Cree tres medidas como:

Total Transactions =

CALCULATE(

    COUNTROWS('Table'),

    FILTER(

        'Table',

        'Table'[SupplierName]='Table'[SupplierName]

    ))
measure 1 =

var _rank=RANKX(

FILTER(

    ALL('Table'),

    'Table'[SamePrice True/False]=TRUE()&& 'Table'[SupplierName]=MAX('Table'[SupplierName])

),

CALCULATE(MAX('Table'[PaymentDate])),,DESC

)

Return

IF(SELECTEDVALUE('Table'[SamePrice True/False])=FALSE(),BLANK(),IF(_rank<=5,1,0)



)
SamePriceLast(5)Transactions =

var _index=CALCULATE(MIN('Table'[Index]),FILTER(ALLSELECTED('Table'),'Table'[measure 1]&&'Table'[SupplierName]=MAX('Table'[SupplierName])))

var _indexmax=CALCULATE(MAX('Table'[Index]),FILTER(ALLSELECTED('Table'),'Table'[measure 1]&&'Table'[SupplierName]=MAX('Table'[SupplierName])))

Return

IF(_indexmax-_index<>4,FALSE(),TRUE())

Paso 3: Aquí está la salida:

v-xulin-mstf_1-1610704523949.png

Aquí está la demostración, por favor pruébelo: Cómo usar el filtro basado en las últimas transacciones x

Saludos

Enlace

View solution in original post

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

No @DeBIe,

Puede utilizar el siguiente método para satisfacer sus necesidades:

Paso 1: Agregue una columna de índice:

v-xulin-mstf_0-1610704523944.png

Paso 2: Cree tres medidas como:

Total Transactions =

CALCULATE(

    COUNTROWS('Table'),

    FILTER(

        'Table',

        'Table'[SupplierName]='Table'[SupplierName]

    ))
measure 1 =

var _rank=RANKX(

FILTER(

    ALL('Table'),

    'Table'[SamePrice True/False]=TRUE()&& 'Table'[SupplierName]=MAX('Table'[SupplierName])

),

CALCULATE(MAX('Table'[PaymentDate])),,DESC

)

Return

IF(SELECTEDVALUE('Table'[SamePrice True/False])=FALSE(),BLANK(),IF(_rank<=5,1,0)



)
SamePriceLast(5)Transactions =

var _index=CALCULATE(MIN('Table'[Index]),FILTER(ALLSELECTED('Table'),'Table'[measure 1]&&'Table'[SupplierName]=MAX('Table'[SupplierName])))

var _indexmax=CALCULATE(MAX('Table'[Index]),FILTER(ALLSELECTED('Table'),'Table'[measure 1]&&'Table'[SupplierName]=MAX('Table'[SupplierName])))

Return

IF(_indexmax-_index<>4,FALSE(),TRUE())

Paso 3: Aquí está la salida:

v-xulin-mstf_1-1610704523949.png

Aquí está la demostración, por favor pruébelo: Cómo usar el filtro basado en las últimas transacciones x

Saludos

Enlace

Syndicate_Admin
Administrator
Administrator

Algo como lo siguiente debería funcionar

SamePriceLast(5)Transactions = IF (HASONEFILTER(Transactions[SupplierName]),
    var maxDate = MAX(Transactions[PaymentDate].[Date])
    var last5dates = TOPN(5, CALCULATETABLE(Transactions, Transactions[PaymentDate].[Date] <= maxDate), Transactions[PaymentDate])
    return countrows( FILTER( last5dates, [SamePrice True/False] = TRUE())) = 5
,"N/A")

Primero compruebo si somos filtrados por el proveedor (es decir, si el proveedor está en las filas o si se selecciona un solo proveedor en un filtro)

Luego tomaré la fecha máxima (en caso de que se filtre la fecha, así que si filtra para enero de 2021 esta medida solo considerará las transacciones en o antes del 31 de enero de 2021) y luego obtendrá las 5 transacciones principales antes de la fecha máxima. A partir de ahí cuento las filas donde el mismo precio es verdadero y comprobar si eso es igual a 5.

Helpful resources

Announcements
April Power BI Update Carousel

Power BI Monthly Update - April 2026

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

Fabric SQL PBI Data Days

Data Days 2026 coming soon!

Sign up to receive a private message when registration opens and key events begin.

New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.