Elimine duplicados mientras conserva filas nulas/en blanco en una columna

Un usuario Pregunto ✅

Anónimo

Es necesario eliminar los valores duplicados de una columna que también tenía muchos valores nulos. Es necesario conservar las filas nulas.

Intenté usar el editor de consultas eliminar duplicado filas funcionan, pero también elimina todos los valores nulos.

Lista inicialLista inicial

Resultado después de usar la función de eliminar filas duplicadas.  Donde se deben conservar las 7 filas nulas de la lista inicialResultado después de usar la función de eliminar filas duplicadas. Donde se deben conservar las 7 filas nulas de la lista inicial

Resultado después de usar la función de eliminar filas duplicadas. Mientras que las 7 filas nulas de la lista inicial deben conservarse.

Adjunto el archivo de muestra para una mayor persuasión. archivo de muestra

ziying35

Hola, @Anónimo

let
    Source = Table.FromRecords(Json.Document(Binary.Decompress(Binary.FromText("i65WSlSyUko2NDJV0lFKAjIrKlKUanVgwiZQ0eLEdLhooiFMbTFcMK80JwcmVoxNJValSIZWGRlClaan58BF0+AOSM/G1J+ajc2q3JxiTKW5SEqT4Y4qT1WqjQUA",BinaryEncoding.Base64),Compression.Deflate))),
    result = Table.FromRows(List.Distinct(Table.ToRows(Source),each if _{0}=null then Text.NewGuid() else _{0}))
in
    result

Si mi código puede resolver su problema, márquelo como una solución

ziying35

Hola, @Anónimo

let
    Source = Table.FromRecords(Json.Document(Binary.Decompress(Binary.FromText("i65WSlSyUko2NDJV0lFKAjIrKlKUanVgwiZQ0eLEdLhooiFMbTFcMK80JwcmVoxNJValSIZWGRlClaan58BF0+AOSM/G1J+ajc2q3JxiTKW5SEqT4Y4qT1WqjQUA",BinaryEncoding.Base64),Compression.Deflate))),
    result = Table.FromRows(List.Distinct(Table.ToRows(Source),each if _{0}=null then Text.NewGuid() else _{0}))
in
    result

Si mi código puede resolver su problema, márquelo como una solución

Hola @Anónimo,

Si desea eliminar filas duplicadas de filas nulas en blanco y mantenga todas las filas nulas, podemos agregar un paso para cumplir con su requisito:

SelectDesireTable = Table.Combine({Table.SelectRows(NameOfYourLastStep, each [Column1] = null),Table.Distinct(Table.SelectRows(NameOfYourLastStep, each [Column1] <> null), {"Column1"})})

Si la lógica distinta depende de múltiples columnas

SelectDesireTable = Table.Combine({
        Table.SelectRows(NameOfYourLastStep, each [Column1] = null and [Column2] = null),
        Table.Distinct(Table.SelectRows(NameOfYourLastStep, each [Column1] <> null or [Column2] <> null), {"Column1","Column2"})})

Todas las consultas están aquí:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dcc3DsAwDATBv7BW41w75+xO0P+/4TULdgZugFvvJRInJSoJzkvMq9FoJbwWnVbK6zFYjZi0Mt6MxWrFppXzdhxWJy4tzrf/W3BuPBLCCw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t]),
    NameOfYourLastStep = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}}),
    SelectDesireTable = Table.Combine({Table.SelectRows(NameOfYourLastStep, each [Column1] = null),Table.Distinct(Table.SelectRows(NameOfYourLastStep, each [Column1] <> null), {"Column1"})})
in
    SelectDesireTable

6.jpg7.jpg

Si desea mantener el orden, primero podemos crear una columna de índice y luego crear una columna personalizada utilizando la siguiente fórmula:

let c = _, 
temp = Table.SelectRows(#"Added Index",each [Column1] = c[Column1]),
rowcount =  Table.RowCount(temp)
in if rowcount=1 or [Column1]=null then [Index] else Table.Max(temp,"Index")[Index]

Si desea eliminar depende de varias columnas:

let c = _, 
temp = Table.SelectRows(#"Added Index",each [Column1] = c[Column1] and [Column2] = c[Column2]),
rowcount =  Table.RowCount(temp)
in if rowcount=1 or ([Column1]=null and [Column2]=null) then [Index] else Table.Max(temp,"Index")[Index]

Todas las consultas están aquí (Tabla (2) en el archivo de muestra):

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dcc3DsAwDATBv7BW41w75+xO0P+/4TULdgZugFvvJRInJSoJzkvMq9FoJbwWnVbK6zFYjZi0Mt6MxWrFppXzdhxWJy4tzrf/W3BuPBLCCw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t]),
    NameOfYourLastStep = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}}),
    #"Added Index" = Table.AddIndexColumn(NameOfYourLastStep, "Index", 0, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each let c = _, 
temp = Table.SelectRows(#"Added Index",each [Column1] = c[Column1]),
rowcount =  Table.RowCount(temp)
in if rowcount=1 or [Column1]=null then [Index] else Table.Max(temp,"Index")[Index]),
    #"Removed Duplicates" = Table.Distinct(#"Added Custom", {"Custom"}),
    #"Removed Columns" = Table.RemoveColumns(#"Removed Duplicates",{"Index", "Custom"})
in
    #"Removed Columns"

Después de eliminar las filas duplicadas según la columna personalizada y la columna adicional, podemos obtener el resultado deseado:

8.jpg9.jpg

Si no cumple con sus requisitos, ¿podría mostrar el resultado esperado exacto según las tablas que hemos compartido?

Por cierto, archivo PBIX adjunto.

Atentamente,

jborro

Hola @Anónimo,

1. Filtre todos los nulos de su tabla de origen y luego ejecute Eliminar duplicados

2. Filtre todos los no nulos de su tabla original

3. Combina 1 + 2.

Atentamente,

JB

edhans

Necesita proporcionar algunos datos. No puede usar la función Table.Distinct aquí porque 2 valores nulos son duplicados y los eliminará.

Esto se puede hacer, pero no con las opciones del menú. Vea los enlaces a continuación para compartir datos.

Cómo obtener buena ayuda rápidamente. Ayúdanos a ayudarte.
Cómo obtener una respuesta rápida a su pregunta
Cómo proporcionar datos de muestra en el foro de Power BI

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *