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
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
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
adham
En respuesta a Alba
¡Funciona perfectamente! ¡Muchas gracias @AlB realmente lo aprecio!