top of page
Foto del escritorJaime Franco Jimenez

Table.Pivot

Esta funcion dada una tabla, especificando una lista de valores en una columna, nos devuelve la columna que le especifiquemos.


Veamos un ejemplo, y, vamos conociendo sus argumentos.


Creamos una consulta en blanco, vamos al editor avanzado, y, borramos las líneas que hay.

Vamos a crear una tabla, ponemos LET, creamos una variable, usamos la funcion Table.FromRecords, abrimos paréntesis, el primer argumento es records, como una lista, abrimos llaves, pulsamos enter.


Let

 aa=Table.FromRecords({

 

Abrimos corchetes, ponemos Producto, que va a ser el nombre de la columna, ponemos el signo igual, entre comillas dobles, ponemos Aspiradora, ponemos coma, ponemos Localidad, que es el nombre de la segunda columna, ponemos el signo igual, entre comillas dobles, ponemos Sevilla, coma, ponemos Valor, que es el nombre de la tercera columna, ponemos el signo igual, entre comillas dobles, ponemos 1, cerramos corchetes.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1]


Ya hemos creado el primer registro, ponemos coma, pulsamos enter.


Copiamos y pegamos el registro anterior.


Cambiamos el producto a Aspiradora, cambiamos la localidad a Cádiz, cambiamos el valor a 3.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3]

 

Coma, pulsamos enter, pegamos el registro copiado, cambiamos el producto a Frigorífico, cambiamos la localidad a Sevilla, cambiamos valor a 2.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2]

 

Coma, pegamos el registro, cambiamos producto por Frigorífico, cambiamos localidad por Huelva, cambiamos valor por 4.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

 

Pulsamos enter, cerramos llaves, cerramos paréntesis.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    })

 

Ponemos in, pulsamos enter, y, ponemos la variable creada “aa”.


let

     aa=Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    })

in

    aa

 

Aceptamos, hemos creado una tabla de tres columnas, en la primera columna tenemos las provincias, en la segunda columna, tenemos la localidad, y, en la tercera columna, tenemos los valores.

Volvemos al editor avanzado, después del cierre de paréntesis de Table.FromRecords, pulsamos enter, creamos otra variable, ponemos el signo igual, ponemos la funcion Table.Pivot, el primer argumento es tabla, pues, ponemos la variable creada anteriormente, y, ponemos coma.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

 

El siguiente argumento es pivotValues, debe de ser una lista, estos son los datos para buscar, pues, ponemos:


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

    {"Sevilla", "Huelva", "Cádiz"},

 

El siguiente argumento es attributeColumn, que es la columna donde se va a buscar el argumento pivotValues, tiene que ser un texto, entre comillas dobles ponemos Localidad.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

    {"Sevilla", "Huelva", "Cádiz"},

    "Localidad",

 

El siguiente argumento es valueColumn, que es la columna para devolver, donde devolverá null donde no hay coincidencia, y, el valor donde haya coincidencia, entre comillas dobles, ponemos valor, cerramos paréntesis.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

    {"Sevilla", "Huelva", "Cádiz"},

    "Localidad",

    "Valor"

)

Dentro de in, quitamos la variable “aa”, y, ponemos la variable tablepivot.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

    {"Sevilla", "Huelva", "Cádiz"},

    "Localidad",

    "Valor"

)

in

    tablepivot

 

Tenemos una tabla, la primera columna se llama Producto, y, contiene los dos productos que hemos dado de alta, después, tenemos tres columnas, cada columna se llama cada valor del argumento attributeColumn, y, debajo de cada provincia, tenemos el valor que le corresponde.

Esta es la tabla que creamos.

Y esta es la tabla que hemos obtenido.

Vemos que en la columna producto aparecen los productos únicos, después, en cada provincia, tenemos el valor que le corresponde por producto.


Seleccionamos el modelo, y, detectamos tipo de datos.

 

Voy a duplicar el segundo registro, y, cambiamos el valor a 5.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 5],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),


Aceptamos, y, nos devuelve error para el producto aspiradora, y, localidad Cádiz.

Este error es debido a que hay dos valores para dicho registro, los cuales no se pueden colocar en una misma celda, para solventarlo, volvemos al editor avanzado, después del argumento valueColumn, ponemos coma, y, la funcion List.Max.


let

    aa = Table.FromRecords({

        [Producto = "Aspiradora", Localidad = "Sevilla", Valor = 1],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 3],

        [Producto = "Aspiradora", Localidad = "Cádiz", Valor = 5],

        [Producto = "Frigorífico", Localidad = "Sevilla", Valor = 2],

        [Producto = "Frigorífico", Localidad = "Huelva", Valor = 4]

    }),

 

    tablepivot = Table.Pivot(

    aa,

    {"Sevilla", "Huelva", "Cádiz"},

    "Localidad",

    "Valor", List.Max

),

 

Aceptamos, y, tenemos el valor máximo.

Ahora, tengo cargado el modelo que suelo usar habitualmente.

He borrado el paso tipo cambiado.


Queremos filtrar el modelo por el total de Sevilla, y, Huelva.


Agregamos un nuevo paso, como argumento tabla es el paso que aparece (Origen), como argumento pivotValues, entre llaves, ponemos entre comillas dobles, Sevilla y Huelva, coma, como argumento attributeColumn, entre comillas dobles, ponemos Provincia, como argumento valueColumn, entre comillas dobles, ponemos Total.


= Table.Pivot(Origen, {"Sevilla","Huelva"}, "Provincia","Total")

 

Como estamos resumiendo por provincia, dicha provincia no aparece, pero, se han agregado dos columnas, una llamada Sevilla, y, otra llamada Huelva, donde aparece null donde no hay coincidencia, y, el total donde hay coincidencia.

Insertamos un nuevo paso, vamos a filtrar el modelo si los valores de las columnas Sevilla, y, Huelva sean diferente a null, después del signo igual ponemos la funcion Table.SelectRows, como argumento tabla, es el ultimo paso, el cual ya aparece, coma, como argumento condición, ponemos each, entre corchetes, ponemos Sevilla, ponemos el signo de indistinto, y, ponemos null, ponemos or, entre corchetes ponemos Huelva, ponemos el signo de indistinto, y, ponemos null, cerramos paréntesis.


= Table.SelectRows(Personalizado1, each [Sevilla] <> null or [Huelva] <> null)

 

Insertamos un nuevo paso, usamos la funcion Table.RemoveColumns, como argumento tabla, es el último paso, el siguiente argumento es columns, que son las columnas para quitar, abrimos llaves, entre comillas dobles, ponemos Sevilla, coma, entre comillas dobles, ponemos Huelva, cerramos llaves, cerramos paréntesis.


= Table.RemoveColumns(#"Filas filtradas",{"Sevilla","Huelva"})

 

Aceptamos, y, ya lo tenemos.

Seleccionamos el modelo, y, detectamos tipo de datos.



Miguel Angel Franco Garcia

2 visualizaciones0 comentarios

Comments


bottom of page