Por último, solo nos faltaría la aplicación de tipos, para lo que vamos a recurrir a una función que también ha aparecido ya varias veces: Table.TransformColumnTypes. Esta función requiere dos argumentos obligatorios: la tabla a la que aplicar los tipos y una lista de asignaciones de tipos a columnas. Todavía no hemos visto qué es una lista, pero sepamos que éstas se crean situando los valores que las componen entre llaves y separados por comas. Por ejemplo: {2, 4, 6}. Una lista formada por dos elementos que, a su vez, fuesen listas podría ser {{1, 2}, {3, 4}}. Una lista formada por un único elemento que, a su vez, fuese una lista podría ser {{1, 2}}.
Las asignaciones que hay que pasar en la lista mencionada son también listas, con dos elementos cada una: el nombre la columna y el tipo a aplicar.
Hagamos un primer intento: La tabla que estamos leyendo y transformando tiene -en este momento- el siguiente aspecto:
Vemos que el primer campo (Geography Id) contiene números enteros, por lo que la fórmula de paso a añadir (si solo quisiéramos asignar tipo a esta columna) sería la siguiente:
La lista incluida como segundo argumento ({{"Geography Id", Int64.Type}}) está formada por un único elemento que es, a su vez, una lista ({"Geography Id", Int64.Type}) con dos elementos: el nombre del campo ("Geography Id") y el tipo a asignar (Int64.Type). El código del proceso ETL sería:
url = "https://interactivechaos.com/data/curso_m/dataset.xlsx",
file = Web.Contents(url),
tables = Excel.Workbook(file),
geography = tables{[Item="Geography",Kind="Sheet"]}[Data],
encabezados = Table.PromoteHeaders(geography),
tipos = Table.TransformColumnTypes(encabezados, {{"Geography Id", Int64.Type}})
in
tipos
Si confirmamos la adición de esta última fórmula de paso, nuestra tabla tendría el siguiente aspecto:
Ahora el campo Geography Id ya muestra el tipo que queríamos (lo que es comprobable viendo el icono con el texto "123" que se muestra a la izquierda de su nombre) y los otros tres campos mantienen el tipo por defecto que habían recibido (tipo texto). Si quisiéramos que la asignación de tipos a estos tres campos también fuese definida en nuestro código, habría que añadir tres parejas {nombre-campo, tipo} (con forma de lista) a la lista que se pasa como segundo argumento a la función Table.TransformColumnTypes. Es decir, la fórmula de paso sería la siguiente:
Para ver este código mejor, separémoslo en varias líneas:
encabezados,
{
{"Geography Id", Int64.Type},
{"Country", type text},
{"Region", type text},
{"City", type text}
}
)
Y el código completo del proceso ETL sería el siguiente:
url = "https://interactivechaos.com/data/curso_m/dataset.xlsx",
file = Web.Contents(url),
tables = Excel.Workbook(file),
geography = tables{[Item="Geography",Kind="Sheet"]}[Data],
encabezados = Table.PromoteHeaders(geography),
tipos = Table.TransformColumnTypes(
encabezados,
{
{"Geography Id", Int64.Type},
{"Country", type text},
{"Region", type text},
{"City", type text}
}
)
in
tipos
(la tabla resultante sería exactamente la misma que la mostrada en la última captura de pantalla)