Power Query: obtenga datos de otra tabla si se cumple la condición

Un usuario Pregunto ✅

adham

Hola a todos,

He estado trabajando en esto todo el día con poca suerte, realmente agradecería algún apoyo en esto. Tengo dos mesas:

Tabla 1:

IDENTIFICACIÓN Estado Valor
1 Cerrado 33
2 Abierto 44
3 A largo plazo 55
4 Abierto 66
5 Cerrado 77
6 Abierto 88
7 A largo plazo 99

Tabla 2:

IDENTIFICACIÓN Fecha Valor
1 10/01/2020 12
2 2/10/2020 23
2 3/10/2020 34
2 4/10/2020 45
6 7/10/2020 78
6 10/8/2020 89
6 9/10/2020 90

Quiero crear una columna condicional en la tabla 1 y hacer lo siguiente:

si el estado de una identificación es cerrado o a largo plazo, use el valor de la tabla 1; de lo contrario, si el estado está abierto, tome el valor de la tabla 2 con la fecha más antigua donde la identificación es la misma que la de la tabla 1. Si hay no hay entradas en la tabla 2 con la misma identificación, entonces debería ser nulo

Así es como debería verse la tabla 1:

IDENTIFICACIÓN Estado Valor Nueva columna
1 Cerrado 33 33
2 Abierto 44 12
3 A largo plazo 55 55
4 Abierto 66 nulo
5 Cerrado 77 77
6 Abierto

88

78
7 A largo plazo 99 99

Esto debe hacerse en Power Query, ya que hay un script de Python muy importante que debo ejecutar en esa tabla una vez que realice este paso.

Gracias.

Alba

En respuesta a adham

@Adham

Simplemente agregue la construcción «intentar … de lo contrario» para detectar el error y devolver nulo en su lugar:

= Table.AddColumn(#"Changed Type", "Custom", each if List.Contains({"Closed", "Long Term"}, [Status]) then [Value] else try Table.Sort(Table.SelectRows(Table2, (inner)=> inner[ID]=[ID]), {{"Date", Order.Ascending}})[Value]{0} otherwise null)

Por favor marque la pregunta resuelta cuando termine y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Alba

Hola @Adham

Puede crear una columna personalizada con el siguiente código:

= if List.Contains({"Closed", "Long Term"}, [Status]) then [Value] else   Table.Sort(Table.SelectRows(Table2, (inner)=> inner[ID]=[ID]), {{"Date", Order.Ascending}})[Value]{0}

donde Table2 es el nombre de su segunda tabla

Por favor marque la pregunta resuelta cuando termine y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

adham

En respuesta a Alba

Hola @AlB,

¡Gracias por tu ayuda! Probé la fórmula y funciona bien, pero devuelve un error cuando intenta leer de la tabla 2 y no hay filas con la misma ID. El problema surge cuando trato de extraer el valor de la primera fila usando esto:

[Value]{0}

Creo que genera un error al intentar extraer el valor de la primera fila que no existe. ¿Cómo puedo hacer que la fórmula funcione pero devuelva valores nulos cuando no hay filas con ID coincidentes en la tabla 2?

Alba

En respuesta a adham

@Adham

Simplemente agregue la construcción «intentar … de lo contrario» para detectar el error y devolver nulo en su lugar:

= Table.AddColumn(#"Changed Type", "Custom", each if List.Contains({"Closed", "Long Term"}, [Status]) then [Value] else try Table.Sort(Table.SelectRows(Table2, (inner)=> inner[ID]=[ID]), {{"Date", Order.Ascending}})[Value]{0} otherwise null)

Por favor marque la pregunta resuelta cuando termine y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

adham

En respuesta a Alba

¡Funciona perfectamente! ¡Muchas gracias @AlB realmente lo aprecio!

Deja un comentario

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