Microsoft Power BI
Power BI
Curso online de 20 horas los días 15, 16, 17, 21 y 22 de junio
Instructor: Daniel Burrueco

Table.Pivot

La función Table.Pivot pivota dos columnas representando parejas de atributos y valores en tantas columnas como atributos se indiquen.

Sintaxis

Table.Pivot(
    table as table,
    pivotValues as list,
    attributeColumn as text,
    valueColumn as text,
    optional aggregationFunction as nullable function
) as table

Parámetros
  • table: tabla en la que realizar la pivotización
  • pivotValues: valores a incluir como columnas del resultado
  • attributeColumn: columna conteniendo los atributos
  • valueColumn: columna conteniendo los valores
  • aggregationFunction: (opcional) función de agregación a aplicar
Información adicional

La función Table.Pivot exige que se especifiquen los valores de la columna de atributos que serán llevados a las cabeceras de las nuevas columnas. Aquellos no especificados se ignorarán.

Si se desea que la pivotización incluya todos los valores existentes en la columna de atributos, puede conseguirse haciendo uso de las funciones Table.ColumnList.Distinct (véase ejemplo más adelante).

Los valores no existentes se añaden como nulos.

Ejemplos

En este ejemplo partimos de la siguiente tabla que incluye las ventas realizadas en varios países a lo largo de tres años:

let
    table = Table.FromRecords({
        [country = "Spain", year = "2018", sales = 1],
        [country = "Spain", year = "2019", sales = 3],
        [country = "Portugal", year = "2018", sales = 2],
        [country = "Portugal", year = "2019", sales = 5],
        [country = "Portugal", year = "2020", sales = 4],
        [country = "France", year = "2018", sales = 3]
    })
in
    table

Función M Table.Pivot

Obsérvese que en la columna de atributos (la columna "year") hay tres valores distintos: 2018, 2019 y 2020.

Si quisiéramos pivotar las columnas de años y ventas en tantas columnas como valores distintos existan en la columna de años, podríamos conseguirlo con el siguiente código:

let
    table = Table.FromRecords({
        [country = "Spain", year = "2018", sales = 1],
        [country = "Spain", year = "2019", sales = 3],
        [country = "Portugal", year = "2018", sales = 2],
        [country = "Portugal", year = "2019", sales = 5],
        [country = "Portugal", year = "2020", sales = 4],
        [country = "France", year = "2018", sales = 3]
    })
in
    Table.Pivot(
        table,
        {"2018", "2019", "2020"},
        "year",
        "sales"
    )

Función M Table.Pivot

Si no se especifican todos los valores existentes en la tabla de atributos, los no incluidos se ignoran:

let
    table = Table.FromRecords({
        [country = "Spain", year = "2018", sales = 1],
        [country = "Spain", year = "2019", sales = 3],
        [country = "Portugal", year = "2018", sales = 2],
        [country = "Portugal", year = "2019", sales = 5],
        [country = "Portugal", year = "2020", sales = 4],
        [country = "France", year = "2018", sales = 3]
    })
in
    Table.Pivot(
        table,
        {"2018", "2019"},
        "year",
        "sales"
    )

Función M Table.Pivot

Si quisiéramos que la pivotización considerase todos los valores existentes en la columna de atributos sin tener que añadirlos explícitamente, podríamos conseguirlo usando las funciones Table.Column (para extraer dichos valores) y List.Distinct (para eliminar los duplicados, lo que produciría un error):

let
    table = Table.FromRecords({
        [country = "Spain", year = "2018", sales = 1],
        [country = "Spain", year = "2019", sales = 3],
        [country = "Portugal", year = "2018", sales = 2],
        [country = "Portugal", year = "2019", sales = 5],
        [country = "Portugal", year = "2020", sales = 4],
        [country = "France", year = "2018", sales = 3]
    })
in
    Table.Pivot(
        table,
        List.Distinct(
            Table.Column(
                table,
                "year"
            )
        ),
        "year",
        "sales"
    )

Función M Table.Pivot

En los ejemplos vistos hasta ahora solo existía un valor para cada combinación de país y año (para cada combinación de clave-atributo), y era este valor el que se llevaba a la tabla pivotada. Si existiese más de un valor para una combinación de clave-atributo la función devolvería un error salvo que se añadiese el parámetro aggregationFunction indicando cómo gestionar esos escenarios. En el siguiente ejemplo -basado en la tabla de los ejemplos anteriores- la combinación de France-2018 aparece dos veces, una con el valor 3 y otra con el valor 7, e indicamos a la función Table.Pivot que incluya el valor medio de los dos con la función List.Average:

let
    table = Table.FromRecords({
        [country = "Spain", year = "2018", sales = 1],
        [country = "Spain", year = "2019", sales = 3],
        [country = "Portugal", year = "2018", sales = 2],
        [country = "Portugal", year = "2019", sales = 5],
        [country = "Portugal", year = "2020", sales = 4],
        [country = "France", year = "2018", sales = 3],
        [country = "France", year = "2018", sales = 7]
    })
in
    Table.Pivot(
        table,
        List.Distinct(
            Table.Column(
                table,
                "year"
            )
        ),
        "year",
        "sales",
        List.Average
    )

Función M Table.Pivot
Categoría
Funciones de tabla
Enviado por admin el Mar, 01/09/2020 - 17:31