Cómo eliminar duplicados según el orden de clasificación

Un usuario Pregunto ✅

cinco uno

Al cargar los datos, necesito mantener solo el último registro.

No tengo una fecha en la que confiar para determinar el último registro, pero tengo un estado, en función del cual puedo ordenar en un orden cronológico.

Pensé que podía

  • Asocie un ID de estado a cada estado, asegurándose de que el ID más bajo sea el más reciente del evento
  • Ordenar por statusID
  • Eliminar duplicados

Desafortunadamente, parece que el orden de clasificación no siempre se respeta,

Leí que deberíamos usar la función Table.Buffer () antes de eliminar los duplicados, pero que esto podría crear un problema de rendimiento.

De hecho, crea problemas de rendimiento. Funciona a pequeña escala, pero cuando utilizo esto en todo el conjunto de datos, el proceso de carga no se completa.

Ahora estoy buscando usar Table.SelectRows con una condición que solo devolvería la fila con el statusID más pequeño para cada RequestID.

Algo en la línea de

 #"Latest Request" = Table.SelectRows(#"Previous Step", each (List.Max([RequestID]," statusID "))),

Pero eso devuelve un error de incompatibilidad de tipos.

RachelL

También tuvimos un problema similar. Encontramos que esto resolvió nuestro problema:

1. Ordene los datos según sea necesario

2. Agregue una columna de índice que comience en 1

3. Eliminar duplicados

La columna de índice ayuda a Power BI a darse cuenta, mientras elimina los duplicados, de que existe un orden específico para los datos ordenados.

acstaffa

Ya he subido datos SQL, ¿cómo puedo crear una función para ordenar el orden de las columnas y forzar la eliminación para seguir el orden de la fecha? No sé cómo crear la función …

Es triste que PBI no «siga» el orden de clasificación para eliminar duplicados …

MarcelBeug

Mi sugerencia sería la siguiente, ilustrada por este video.

Creé algunos datos de prueba en Access solo para verificar si el código permitiría el plegado de consultas (haciendo clic con el botón derecho en cada paso de las consultas y verificando la existencia de Native Query). Todos lo hicieron, por lo que el rendimiento debería estar bien.

Creé una consulta Los datos de entrada que solo lee los datos de Access. Para esta consulta, la carga está deshabilitada.

let
    Source = Access.Database(File.Contents("C:UsersMarcelDocumentsForum bijdragenPower BI CommunityHow to remove duplicates based on sort order.accdb"), [CreateNavigationProperties=true]),
    _Requests = Source{[Schema="",Item="Requests"]}[Data]
in
    _Requests

Creé una consulta MinStatusByRequestID con la entrada de la consulta InputData que determina el statusID mínimo para cada RequestID usando Agrupar por en la pestaña Transformar. También para esta consulta, la carga está deshabilitada.

let
    Source = InputData,
    #"Grouped Rows" = Table.Group(Source, {"RequestID"}, {{"minStatus", each List.Min([statusID]), type number}})
in
    #"Grouped Rows"

Creé una consulta FilteredData que fusiona las 2 consultas anteriores con una combinación interna. Para esta consulta, la carga está habilitada.

let
    Source = InputData,
    #"Merged Queries" = Table.Join(Source,{"RequestID", "statusID"},MinStatusByRequestID,{"RequestID", "minStatus"},JoinKind.Inner),
    #"Removed Columns" = Table.RemoveColumns(#"Merged Queries",{"minStatus"})
in
    #"Removed Columns"

viento de jade

En respuesta a MarcelBeug

¡Muchas gracias Marcel! ¡He estado luchando durante días y buscando una solución loca en Google y acabas de resolver mi problema!

osinquinvdm

En respuesta a MarcelBeug

¡Vaya, gracias Marcel por tomarse el tiempo para brindar esa explicación detallada e incluso hacer un video!

Aprovechar la agrupación y la fusión es genial.

Deja un comentario

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