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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
markmess77
Resolver I
Resolver I

¿Cómo funciona la eliminación de duplicados?

Estoy buscando eliminar duplicados en una tabla, pero quiero asegurarme de que las filas que estoy manteniendo son las que realmente quiero.

Por ejemplo, tengo algo como lo siguiente donde tengo un ID de recuento y dos empleados asignados a la cuenta

IdEmpleado 1Empleado 2
123JoeEddie
456FrankFelicia
789MonicaBetty
789MonicaBetty
789HannahBrett
123Joe

Hank

Tengo la impresión de que si elimino duplicados en Power Query, siempre conservará la última instancia. También estoy bajo la suposición de que cada vez que anexe nuevos datos a Power BI, los datos más recientes se agregan a la parte inferior de cada tabla. En el ejemplo anterior, me gustaría mantener la última instancia de cada una de las columnas de identificador, ya que contienen las asignaciones de empleados más actualizadas. Esencialmente, quiero estar seguro de que una vez que descarte los duplicados de ID, siempre devuelvo lo siguiente

IdEmpleado 1Empleado 2
456FrankFelicia
789HannahBrett

123

JoeHank

Quiero estar seguro de que todo está actuando como espero y estoy presentando los datos más relevantes y actualizados.

¿Alguien puede confirmar que la función drop duplicates siempre actuará de esta manera?

1 ACCEPTED SOLUTION
v-shex-msft
Community Support
Community Support

Hola @markmess77,

Puede consultar el siguiente código de ejemplo para cumplir sus requisitos:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyVtJR8spPBZKuKSmZqUqxOtFKJqZmQL5bUWJeNohOzclMzkwEy5hbWAJFfPPzMpMTgQyn1JKSSmIkPBLz8hIzQBJFQBmwBLLVHiCbYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, #"Employee 1" = _t, #"Employee 2" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Employee 1", type text}, {"Employee 2", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each Table.LastN(_,1), type table [ID= number, Employee 1=text, Employee 2=text]}}),
    #"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Employee 1", "Employee 2"}, {"Employee 1", "Employee 2"})
in
    #"Expanded Count"

Lógica:

1. Agrupe las filas de la tabla en función de los campos de ID.
2. Mantenga la última fila de cada tabla agrupada.
3. Expanda los registros de tabla de grupo filtrados.

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

View solution in original post

5 REPLIES 5
Ashish_Mathur
Super User
Super User

Hola

Este código M funciona

let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Employee 1", type text}, {"Employee 2", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
    #"Grouped Rows" = Table.Group(#"Added Index", {"ID"}, {{"Max of index", each List.Max([Index]), type number}}),
    Joined = Table.Join(#"Added Index", "ID", #"Grouped Rows", "ID"),
    #"Added Custom" = Table.AddColumn(Joined, "Test", each if [Index]=[Max of index] then "Keep" else "Discard"),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Test] = "Keep")),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Index", "Max of index", "Test"})
in
    #"Removed Columns"

Espero que esto ayude.

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
v-shex-msft
Community Support
Community Support

Hola @markmess77,

Puede consultar el siguiente código de ejemplo para cumplir sus requisitos:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyVtJR8spPBZKuKSmZqUqxOtFKJqZmQL5bUWJeNohOzclMzkwEy5hbWAJFfPPzMpMTgQyn1JKSSmIkPBLz8hIzQBJFQBmwBLLVHiCbYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, #"Employee 1" = _t, #"Employee 2" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Employee 1", type text}, {"Employee 2", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"Count", each Table.LastN(_,1), type table [ID= number, Employee 1=text, Employee 2=text]}}),
    #"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Employee 1", "Employee 2"}, {"Employee 1", "Employee 2"})
in
    #"Expanded Count"

Lógica:

1. Agrupe las filas de la tabla en función de los campos de ID.
2. Mantenga la última fila de cada tabla agrupada.
3. Expanda los registros de tabla de grupo filtrados.

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

¡Gracias por la propina!

Una pregunta potencialmente tonta. ¿Utilizo el código que proporcionó en una expresión DAX al crear una nueva tabla? ¿O es algo diferente?

camargos88
Community Champion
Community Champion

Hola @markmess77 ,

Pruebe este código:

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyVtJR8spPBZKuKSmZqUqxOtFKJqZmQL5bUWJeNohOzclMzkwEy5hbWAJFfPPzMTTgQyn1JKSSmIk4PBLz8hHH4BJF BinaryEncoding.Base64), Compression.Deflate)), let _t á ((texto de tipo) meta [Serialized.Text ? true]) en la tabla de tipos [ID á _t, "Empleado 1" á _t, "Empleado 2" - _t]),
"Tipo modificado" ? Tabla.TransformColumnTypes(Fuente, "ID", Int64.Type, "Empleado 1", texto de tipo, "Empleado 2", texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo, texto de tipo
Grupo: Table.Group('Changed Type'', ''ID'', ''Rows'',''Rows'', cada Tabla.AddIndexColumn(_, "Index", 1), escriba table'),
"Filas expandidas" ? Tabla.ExpandTableColumn(Grupo, "Filas", "Empleado 1", "Empleado 2", "Índice", "Empleado 1", "Empleado 2", "Índice", "Índice", "Índice", "Índice",),
"Añadido personalizado" - Tabla.AddColumn ("Filas expandidas", "Personalizado", cada tabla.grupo("Filas expandidas", "ID", "Max", cada List.Max([Índice]),
"Personalizado Expandido" - Tabla.ExpandTableColumn("Añadido Personalizado", "Personalizado", "ID", "Max", "ID.1", "Max"-),
"Añadido Personalizado1" - Tabla.AddColumn("Personalizado Expandido", "Personalizado", cada uno si [ID] - [ID.1] y [Index] á [Max] entonces 1 si 0),
"Filas filtradas" - Tabla.SelectRows("Añadido Custom1", cada uno ([Personalizado] - 1)),
"Columnas eliminadas" - Tabla.RemoveColumns("Filas filtradas", "índice", "ID.1", "Max"-)
En
"Columnas eliminadas"

Básicamente crea un índice para cada ID y filtro al valor máximo para cada ID.

Espero que te ayude,

Ricardo



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Greg_Deckler
Super User
Super User

Agregue un índice y luego puede estar seguro de cuál. Pensé que guardaba la primera fila que encontró.

@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.