Notas máximas por asignaturas
- Jaime Franco Jimenez
- 18 jul 2024
- 3 Min. de lectura
Tenemos dos tablas, en la primera tabla (Tabla1), tenemos una serie de estudiantes, y, una serie de asignaturas, después, tenemos las notas para cada estudiante, y, asignatura.
Después, tenemos otra tabla (Tabla2), donde tenemos la misma estructura que para Tabla1.
Debemos de fusionar las dos tablas tomando las notas máximas de la asignatura.
Vamos a la pestaña de datos, dentro de obtener y transformar datos, desplegamos obtener datos, desplegamos de otras fuentes, y, seleccionamos consulta en blanco.
Vamos a la pestaña de vista, y, hacemos clic en editor avanzado.
Borramos la variable Origen.
Creamos una variable, nos vamos a traer la tabla1, para ello, ponemos Excel.CurrentWorkbook(), abrimos llaves, abrimos corchetes, ponemos Name e igualamos entre comillas dobles a Tabla1, cerramos corchetes, cerramos llaves, abrimos corchetes, ponemos la palabra Content, cerramos paréntesis, es decir, vamos a traernos tabla1 completa.
Después de IN, ponemos la variable “a”, y, hacemos clic en listo.
Tenemos la tabla1, donde no se ha reconocido el tipo de datos.
Ponemos coma al final de la expresión de la variable “a”, creamos otra variable, repetimos la expresión anterior, pero, cambiamos Tabla1 por Tabla2, y, tenemos la tabla2 completa.
Al final de la última línea, ponemos coma, creamos otra variable, donde vamos a usar la funcion Table.Combine, que devuelve una tabla que es el resultado de combinar una lista de tablas.
Sintaxis:
Table.Combine(tables as list, optional columns as any)
El argumento tables, es el conjunto de tablas a combinar, separado cada tabla por coma, opcionalmente, tenemos el argumento columns, esta funcion devuelve una tabla.
Después de la declaración de la variable, ponemos Table.Combine, como argumento tables, abrimos llaves, porque debemos de indicar una lista de tablas, ponemos la variable “a”, ponemos coma, ponemos la variable “b”, cerramos llaves, cerramos paréntesis.
Vemos ambas tablas combinadas, si nos fijamos en los modelos, en Tabla1, tenemos las asignaturas biología, física, y, química, y, en la segunda tabla tenemos las asignaturas química, biología y ecología, por lo que química y biología están presentes en ambas tabla, pero, ecología, solo esta presente en la tabla2, y, en el modelo de Power Query, tenemos cuatro columnas.
Ponemos coma al final de la expresión, pulsamos enter, creamos otra variable, usamos la función Table.UnpivotOtherColumns, que convierte todas las columnas, excepto la seleccionada en pares (atributo-valor), esta función devuelve una tabla.
Sintaxis:
Table.UnpivotOtherColumns(table as table, pivotColumns as list, attributeColumn as text, valueColumn as text) as table
let
a=Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
b=Excel.CurrentWorkbook(){[Name="Tabla2"]}[Content],
c=Table.Combine({a,b}),
d=Table.UnpivotOtherColumns(c,{"Estudiante"}
El siguiente argumento es attributeColumn, que debe de ser un texto, ponemos A, es el nombre de la columna, como argumento valueColumn, también, debe de ser un texto, ponemos V, es el nombre de la segunda columna, cerramos paréntesis.
let
a=Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
b=Excel.CurrentWorkbook(){[Name="Tabla2"]}[Content],
c=Table.Combine({a,b}),
d=Table.UnpivotOtherColumns(c,{"Estudiante"},"A","V")
Clic en listo.
Tenemos el modelo resumido por estudiantes, en la columna A, tenemos las asignaturas, y, en la columna V, el valor de cada asignatura.
Creamos otra variable, usamos la función Table.Pivot, esta función nos va a resumir por atributo, y, valor.
Sintaxis:
Table.Pivot(table as table, pivotValues as list, attributeColumn as text, valueColumn as text, optional aggregationFunction as nullable function) as table
Ponemos la Function Table.Pivot,como argumento table, ponemos la variable “d”, como argumento pivotValues, usamos la función List.Sort, como argumento ponemos la función List.Distinct, como argumento ponemos la variable “d”, entre corchetes, ponemos A, cerramos paréntesis, quiere decir que nos va a devolver los valores únicos de la columna A de la variable “d”, ponemos coma, como argumento attributeColumn, ponemos A, como argumento valueColumn, ponemos V, como argumento aggregationFunction, que es opcional, ponemos la función List.Max, que devuelve el valor máximo de una lista.
let
a=Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
b=Excel.CurrentWorkbook(){[Name="Tabla2"]}[Content],
c=Table.Combine({a,b}),
d=Table.UnpivotOtherColumns(c,{"Estudiante"},"A","V"),
e=Table.Pivot(d,List.Sort(List.Distinct(d[A])),"A","V",List.Max)
Nos va a devolver el valor máximo de cada asignatura por estudiante.
Dentro de IN, ponemos la variable “e”.
let
a=Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
b=Excel.CurrentWorkbook(){[Name="Tabla2"]}[Content],
c=Table.Combine({a,b}),
d=Table.UnpivotOtherColumns(c,{"Estudiante"},"A","V"),
e=Table.Pivot(d,List.Sort(List.Distinct(d[A])),"A","V",List.Max)
in
e
Clic en listo.
Cerramos y cargamos como tabla.
Ya tenemos nuestro ejercicio resuelto.
Miguel Angel Franco
Comentarios