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 comparar las filas de la misma tabla y crear una columna independiente en Power Query o DAX?

En la tabla de ejemplo siguiente:

Hay filas con identificadores similares, pero las fechas asociadas con ellas son diferentes. Mi objetivo es contar las columnas En, Gd, Wd, Gd1 y Wd1 para cada ID, pero cuando hay varias filas con el mismo ID, quiero conservar la que tiene la última fecha. Por ejemplo, quiero contar la fila 1 con id 15224, fecha 31/05/2017, Gd1 como 1 y no contar la fila 2 con id 15224, fecha 26/09/2016 y wd como 1. ¿Cómo hago esto en power query o usando una medida? Gracias y agradezco su ayuda.

IDENTIFICACIÓNFechaEnGdEnana blancaGd1Wd1
152245/31/201701000
152249/26/201600100
152545/31/201701000
152546/6/201700100
144155/31/201701000
144158/18/201500000
1460212/21/201800010
146025/31/201701000
152625/17/201800010
152625/31/201700100
1530612/21/201800010
153065/31/201701000
6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Muchas gracias por su ayuda. Se lo agradezco.

Syndicate_Admin
Administrator
Administrator

No importa, la fórmula a continuación fijó las fechas. Gracias.

Latest_Date_by_ID = CALCULAR ( max( 'tabla'[fecha]), ALLEXCEPT ( 'tabla', 'tabla'[ID] ) )

Syndicate_Admin
Administrator
Administrator

Gracias por la rápida respuesta. Lo siento, mi explicación no está clara. Lo intentaré de nuevo. Esta es una tabla de muestra que estoy viendo.

ID Date En Gd Wd Gd1 Wd1

--------------------------------------------------------------
15224 5/31/2017 0 1 0 0 0
15224 9/26/2016 0 0 1 0 0
15254 5/31/2017 0 1 0 0 0
15254 6/6/2017 0 0 1 0 0
14415 5/31/2017 0 1 0 0 0
14415 8/18/2015 0 0 0 0 0
14602 12/21/2018 0 0 0 1 0
14602 5/31/2017 0 1 0 0 0
15262 5/17/2018 0 0 0 1 0
15262 5/31/2017 0 0 1 0 0
15306 12/21/2018 0 0 0 1 0
15306 5/31/2017 0 1 0 0 0

Mi objetivo es obtener un recuento total final de En, Gd, Wd, Gd1, Wd1. Hay filas con los mismos ID pero con diferente fecha. En mi cálculo, quiero incluir filas con la última fecha para cada ID.

La respuesta sería En = 0, Gd = 3, Wd = 0, Gd1 = 3

Gd = 3 porque he contado la fila 1, 3, 5. Las filas 8 y 12 no se cuentan.

Las filas 7 y 8 tienen el mismo ID, pero la fila 7 tiene la última fecha. Por lo tanto, la fila 8 no está incluida

La fila 11 y la fila 12 tienen el mismo ID, pero la fila 11 tiene la fecha más reciente. Por lo tanto, la fila 12 no está incluida

Wd = 0 porque ninguna de las filas pasó la prueba.

La fila 1 y 2 tiene el mismo ID, pero la fila tiene la última fecha. Así que la fila 2 no está incluida.

La fila 3 y 4 tiene el mismo ID, pero la fila tiene la última fecha. Por lo tanto, la fila 4 no está incluida.

Espero que esto aclare. Gracias.

Creo que puede usar DAX o Power Query como proporcioné.

En la tabla de salida final, filtre aquellos solo con "Último registro de ID" como 1.

sevenhills_0-1677104381384.png

O si desea usarlo en un cálculo, puede hacerlo como

Measure = 

var _t = Filter( ALLSELECTED(TableRank_Dups), [Latest ID Record] = 1)

RETURN CALCULATE( Sum(TableRank_Dups[En]) + Sum(TableRank_Dups[Gd]) + Sum(TableRank_Dups[Wd]) + sum(TableRank_Dups[Gd1]) + sum(TableRank_Dups[Wd1]) , _t)

Puede modificar esta lógica de medida según sus necesidades.

Consejos:

Es un escenario común.

Digamos, si tiene muchas filas, preferiré crear en Power Query con el método anterior.

Digamos, si desea facilidad de uso o un gran número de filas, crearé la última tabla de registros.

Gracias

Syndicate_Admin
Administrator
Administrator

No estaba claro cuál es el resultado esperado. ¿Está buscando la última fecha de cada ID o una forma de identificar el último registro?

¡Proporcioné múltiples formas y ajustes a sus necesidades!

Power Query

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jdBLDoAgDEXRvTA2Ka/Qgmsx7H8b8ouKmsCggcHJTeE4DITZm80IORBbhHy3edDPNmm75U6sRepD4C1luVmlkj7hT9J7yFqyy0iIRcogRqmWS4OJazS+GD506UXaJMKkecmx+fefzuriop1OFk0n", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Date = _t, En = _t, Gd = _t, Wd = _t, Gd1 = _t, Wd1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Date", type date}, {"En", Int64.Type}, {"Gd", Int64.Type}, {"Wd", Int64.Type}, {"Gd1", Int64.Type}, {"Wd1", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Latest Date by ID", each List.Max([Date]), type nullable date}, {"allRows", each _, type table [ID=nullable number, Date=nullable date, En=nullable number, Gd=nullable number, Wd=nullable number, Gd1=nullable number, Wd1=nullable number]}}),
    #"Expanded allRows" = Table.ExpandTableColumn(#"Grouped Rows", "allRows", {"Date", "En", "Gd", "Wd", "Gd1", "Wd1"}, {"Date", "En", "Gd", "Wd", "Gd1", "Wd1"}),
    #"Added Custom" = Table.AddColumn(#"Expanded allRows", "Latest ID Record", each if ( [Latest Date by ID] = [Date]) then 1 else 0, Int64.Type),
    #"Reordered Columns" = Table.ReorderColumns(#"Added Custom",{"ID", "Date", "En", "Gd", "Wd", "Gd1", "Wd1", "Latest Date by ID", "Latest ID Record"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Reordered Columns",{{"ID", Int64.Type}, {"Date", type date}, {"En", Int64.Type}, {"Gd", Int64.Type}, {"Wd", Int64.Type}, {"Gd1", Int64.Type}, {"Wd1", Int64.Type}, {"Latest Date by ID", type date}, {"Latest ID Record", Int64.Type}})
in
    #"Changed Type1"

Salida:

sevenhills_0-1677096841220.png

DAX

Digamos que sus datos se ven de la siguiente manera:

sevenhills_1-1677096890042.png

Medidas:

Latest Date by ID = CALCULATE( Max( TableRank_Dups[Date]), FILTER(ALLSELECTED(TableRank_Dups), TableRank_Dups[ID] = max(TableRank_Dups[ID])))


Latest ID Record = 
IF ( HASONEVALUE( TableRank_Dups[ID]) && HASONEVALUE(TableRank_Dups[Date]) ,
 IF (Max( TableRank_Dups[Date]) = [Latest Date by ID] , 1, 0)
 , blank())

/*
IF ( HASONEVALUE( TableRank_Dups[ID]) && HASONEVALUE(TableRank_Dups[Date]) ,
 IF (Max( TableRank_Dups[Date]) = CALCULATE( Max( TableRank_Dups[Date]), FILTER(ALLSELECTED(TableRank_Dups), TableRank_Dups[ID] = max(TableRank_Dups[ID]))), 1, 0)
 , blank())
 */

Salida:

sevenhills_2-1677097001356.png

Latest Date by ID = CALCULATE( Max( TableRank_Dups[Date]), FILTER(ALLSELECTED(TableRank_Dups), TableRank_Dups[ID] = max(TableRank_Dups[ID])))

Gracias. Estoy probando el método DAX. Esta línea devuelve la misma fecha 21/12/2018 para cada fila de la tabla en lugar de devolver la última fecha para cada ID como se muestra en la salida. ¿Qué me estoy perdiendo? Gracias.

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.