Dan80
Hola a todos,
Tengo una lista de números de vuelo y deseo excluir algunos números de vuelo si están dentro de un rango específico. ¿Cómo haría esto en Power query?
Por ejemplo, tengo un gran conjunto de datos de vuelos individuales y quiero vincular el conjunto de datos a la tabla de referencia de vuelos para mantener / eliminar, por ejemplo, los números de vuelo:
1 a 500 mantener
501 a 600 eliminar
601 a 1000 mantener
por lo que el vuelo número 53 se mantendría pero el vuelo número 598 se eliminaría. Gracias,
dan80
tringuyenminh92
@ Dan80 Según tengo entendido, sus datos en la «tabla de referencia» se cambiarán / configurarán, por lo que necesitará una solución dinámica para buscar la acción para cada número de vuelo en los datos de vuelo.
Así que, por favor, compruebe mi solución basada en la función personalizada en Power Query
(archivo sample.pbix)
https: //lookaside.fbsbx.com/file/sample.pbix? token = AWwziSi9Ut52Zsq1mOTefjlCiFMLHC5QRB2RUXvz_69JZePIc …
(archivo de Excel para datos: hoja de vuelos y hoja de referencia)
https: //lookaside.fbsbx.com/file/Flights.xlsx? token = AWz-baAdF3L7Y5pW92Jeu8cQ6emRJEM9Oaz2WLR0sfKJCvHk …
En primer lugar, creo una función personalizada en el Editor de consultas:
(Esta función buscará en su tabla de referencia y obtendrá la primera fila a la que pertenece el valor (número de vuelo actual). Y luego seleccione el campo de acción (Eliminar / Mantener)
(value) => let Source = Reference, #"Filtered Rows" = Table.First(Table.SelectRows(Source, each ([From] <= value) and ([To] >= value))), #"Action" = Record.Field(#"Filtered Rows","Action") in #"Action"
Después de eso, en la pestaña «Lista de vuelo» y «Agregar columna», selecciono «Invocar función personalizada» para agregar una nueva columna con la función anterior:
El resto es filtrar la columna GetActionForFlight con el valor Keep:
Si esto funciona para usted, acéptelo como solución y también proporcione KUDOS.
fboratino
En respuesta a tringuyenminh92
@ tringuyenminh92 esta solución funciona perfectamente para mi requerimiento, el único problema es que para la tabla «Referencia» tengo como 5k filas y para «Lista de vuelo» tengo como 1.5m filas y cuando trato de agregar esto a mi informe, hago clic en el botón cerrar y aplicar, sigue «Aplicando cambios de consulta» y nunca termina, ¿hay alguna forma de optimizar la ejecución del código? Creo que el problema es intentar aplicar la función para una cantidad tan grande de filas.
MarcelBeug
En respuesta a fboratino
Mi sugerencia sería crear una tabla con eliminaciones individuales (o se queda, pero no necesitas ambos) de la tabla con rangos.
A continuación, une la tabla con números de vuelo con la tabla con eliminaciones, une type left anti, que solo mantendrá los números de vuelo que no están en la tabla con eliminaciones.
Consultas eliminadas:
let Source = KeepOrDelete, #"Filtered Rows" = Table.SelectRows(Source, each ([KeepOrDelete] = "delete")), #"Added Custom" = Table.AddColumn(#"Filtered Rows", "DeleteNumber", each {[From]..[To]}, type {Int64.Type}), #"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"DeleteNumber"}), #"Expanded DeleteNumber" = Table.ExpandListColumn(#"Removed Other Columns", "DeleteNumber") in #"Expanded DeleteNumber"
Consulta filtradaVuelos:
let Source = Table.NestedJoin(Flights,{"Flight Number"},Deletes,{"DeleteNumber"},"Deletes",JoinKind.LeftAnti), #"Removed Columns" = Table.RemoveColumns(Source,{"Deletes"}) in #"Removed Columns"
BhaveshPatel
Puede usar la columna Condicional para lograr esto.
Dan80
En respuesta a BhaveshPatel
Gracias, pero hay al menos 20 rangos de números que deben excluirse y además necesito que la fórmula sea dinámica, ya que los números excluidos pueden cambiar, por lo que una fórmula no es una opción. ¿Algo más que se te ocurra?
BhaveshPatel
En respuesta a Dan80
Creo que debería usar parámetros en la consulta para lograr lo que está buscando. Consulte AQUÍ para crear soluciones utilizando parámetros de consulta dinámicos.
Greg_Deckler
Bueno, puede hacer esto en Power Query o usando filtros de Informe / Página / Visualización. En Power Query, agregaría una línea como:
#"Filtered Rows" = Table.SelectRows(#"Previous Step", each ([FlightID] < 501 and [FlightID] > 600))
Si hace esto después de la importación, simplemente arrastre «FlightID» al área de filtrado elegida y utilice el filtrado avanzado para seleccionar vuelos <501 Y superiores a 600.
Dan80
En respuesta a Greg_Deckler
Thansk espera por tu ayuda (¡una vez más!). Sin embargo, estaba usando un ejemplo simple, la tabla de exclusiones es mucho más larga que en la pregunta y, por lo tanto, no podré usar una fórmula. En Excel, uso un Index Match (no exacto) y eso funciona, pero necesito replicar la lógica en PQ.