La función Table.SplitColumn divide la columna indicada en varias columnas usando una cierta función de división.
Table.SplitColumn(
table as table,
sourceColumn as text,
splitter as function,
optional columnNamesOrNumber as any,
optional default as any,
optional extraColumns as any
) as table
- table: tabla en la que dividir la columna indicada
- sourceColumn: columna a dividir
- splitter: función de división a usar
- columnNamesOrNumber: (opcional) nombres de las columnas a crear o número de columnas a crear
- default: (opcional) valor a asignar a los valores nulos que surjan en la división de los valores
- extraColumns: (opcional) criterio a seguir cuando el número de columnas creadas sea superior al esperado
Aparentemente, el número de columnas a crear viene determinado por el número de bloques identificados en la división del valor del campo sourceColumn en la primera fila de la tabla (información no documentada).
Si el parámetro columnNamesOrNumber es un número, las columnas creadas recibirán el nombre de la columna siendo dividida seguidas de un punto y un número de columna (de 1 en adelante).
El argumento extraValues puede tomar los valores ExtraValues.List, ExtraValues.Error o ExtraValues.Ignore.
Las funciones de división integradas disponibles son las siguientes:
- Splitter.SplitByNothing
- Splitter.SplitTextByAnyDelimiter
- Splitter.SplitTextByCharacterTransition
- Splitter.SplitTextByDelimiter
- Splitter.SplitTextByEachDelimiter
- Splitter.SplitTextByLengths
- Splitter.SplitTextByPositions
- Splitter.SplitTextByRanges
- Splitter.SplitTextByRepeatedLengths
- Splitter.SplitTextByWhitespace
En este ejemplo partimos de la siguiente tabla:
let
Source = Table.FromRecords(
{
[name = "John", phone = "34-941-524-250"],
[name = "Alfonso", phone = "45-264-432-113"],
[name = "John", phone = "34-254-756-110"],
[name = "Marta", phone = "14-681-137-984"]
}
)
in
Source
Vemos que el campo "phone" está formado por cuatro bloques separados por guiones. Si quisiéramos dividir este campo en otras tantas columnas, una para cada bloque, podríamos hacerlo con el siguiente código:
let
Source = Table.FromRecords(
{
[name = "John", phone = "34-941-524-250"],
[name = "Alfonso", phone = "45-264-432-113"],
[name = "John", phone = "34-254-756-110"],
[name = "Marta", phone = "14-681-137-984"]
}
)
in
Table.SplitColumn(
Source,
"phone",
Splitter.SplitTextByDelimiter("-")
)
En este segundo ejemplo queremos forzar que el número de columnas sea 4, pues uno de los teléfonos tiene cuatro bloques y el resto solo tres:
let
Source = Table.FromRecords(
{
[name = "John", phone = "34-941-524"],
[name = "Alfonso", phone = "45-264-432-113"],
[name = "John", phone = "34-254-756"],
[name = "Marta", phone = "14-681-137"]
}
)
in
Table.SplitColumn(
Source,
"phone",
Splitter.SplitTextByDelimiter("-"),
4
)
Siguiendo con el mismo ejemplo, podemos dar nombres a las cuatro columnas creadas y sustituir los valores nulos con, por ejemplo, una cadena de texto vacía con el siguiente código:
let
Source = Table.FromRecords(
{
[name = "John", phone = "34-941-524"],
[name = "Alfonso", phone = "45-264-432-113"],
[name = "John", phone = "34-254-756"],
[name = "Marta", phone = "14-681-137"]
}
)
in
Table.SplitColumn(
Source,
"phone",
Splitter.SplitTextByDelimiter("-"),
{"Code", "Block 1", "Block 2", "Block 3"},
""
)