La función Table.Unpivot despivota un conjunto de columnas de una tabla convirtiéndolas en dos columnas de atributos y valores.
Table.Unpivot(
table as table,
pivotColumns as list,
attributeColumn as text,
valueColumn as text
) as table
- table: tabla a despivotar
- pivotColumns: columnas a convertir en dos columnas de atributos y valores
- attributeColumn: nombre de la columna de atributos a crear
- valueColumn: nombre de la columna de valores a crear
Los valores nulos no son incluidos en el resultado de la función (véase ejemplo a continuación).
En este ejemplo partimos de la siguiente tabla mostrando las ventas en varios países a lo largo de tres años:
let
table = Table.FromRecords({
[country = "Portugal", 2015 = 15, 2016 = null, 2017 = 23],
[country = "Germany", 2015 = 12, 2016 = 31, 2017 = 19],
[country = "UK", 2015 = 8, 2016 = 11, 2017 = 14]
})
in
table
Si quisiéramos convertir las tres columnas correspondientes a los años en dos columnas, una conteniendo el año (a la que podemos llamar "Year") y otra conteniendo la cifra de ventas (a la que podemos llamar "Sales"), podríamos conseguirlo con el siguiente código:
let
table = Table.FromRecords({
[country = "Portugal", 2015 = 15, 2016 = null, 2017 = 23],
[country = "Germany", 2015 = 12, 2016 = 31, 2017 = 19],
[country = "UK", 2015 = 8, 2016 = 11, 2017 = 14]
})
in
Table.Unpivot(
table,
{"2015", "2016", "2017"},
"Year",
"Sales"
)
Obsérvese que el valor nulo correspondiente a Portugal, 2016 no se ha incluido.
En este segundo ejemplo nuestra tabla tiene un campo adicional correspondiente a la ciudad, campo que no incluimos en la despivotización:
let
table = Table.FromRecords({
[country = "Portugal", city = "Lisbon", 2015 = 15, 2016 = null, 2017 = 23],
[country = "Germany", city = "Berlin", 2015 = 12, 2016 = 31, 2017 = 19],
[country = "UK", city = "London", 2015 = 8, 2016 = 11, 2017 = 14]
})
in
Table.Unpivot(
table,
{"2015", "2016", "2017"},
"Year",
"Sales"
)