Forum Discussion
PowerQuery Question: Renaming Header
- 9 years ago
MissingField.Error would halt the input process.
I don't know if there is a standard approach.
My suggestion would be to create 3 queries, like:
- ColumnRenames with From and To column Names
- GetInput: getting the input and renaming the columns with MissingField.Ignore
- CheckInput: select all records from ColumnRenames of which the To name does not exist in GetInput (should be empty).
You may then include CheckInput in some visual as an alert.
Below some sample code you can copy/paste in an empty pbix file to see how t works.
ColumnRenames:
let Source = #table(type table[From = text, To = text],{{"Chinese 1", "English 1"},{"Chinese 2", "English 2"},{"Chinese 3", "English 3"}}) in SourceGetInput (I just created some data in a table with 2 columns):
let Source = {1..10}, #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Chinese 1"}}), #"Added Index" = Table.AddIndexColumn(#"Renamed Columns", "Chinese 2", 0, 1), #"Renamed Columns1" = Table.RenameColumns(#"Added Index",Table.ToRows(ColumnRenames), MissingField.Ignore) in #"Renamed Columns1"CheckInput (just a oneliner, without let .. in):
Table.SelectRows(ColumnRenames, each not List.Contains(Table.ColumnNames(GetInput),[To]))
That is very much helpful MarcelBeug and thank you very much. I do have more question though...
If this is a regular task for someone already, would there be a way to be notified that an error has occured or a Header name has gone missing? If I use the default MissingField.Error would that halt the import process?
I will try it now but maybe what I wanted to know is if there is an error handling best suited for a scenario like that.
MissingField.Error would halt the input process.
I don't know if there is a standard approach.
My suggestion would be to create 3 queries, like:
- ColumnRenames with From and To column Names
- GetInput: getting the input and renaming the columns with MissingField.Ignore
- CheckInput: select all records from ColumnRenames of which the To name does not exist in GetInput (should be empty).
You may then include CheckInput in some visual as an alert.
Below some sample code you can copy/paste in an empty pbix file to see how t works.
ColumnRenames:
let
Source = #table(type table[From = text, To = text],{{"Chinese 1", "English 1"},{"Chinese 2", "English 2"},{"Chinese 3", "English 3"}})
in
Source
GetInput (I just created some data in a table with 2 columns):
let
Source = {1..10},
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Chinese 1"}}),
#"Added Index" = Table.AddIndexColumn(#"Renamed Columns", "Chinese 2", 0, 1),
#"Renamed Columns1" = Table.RenameColumns(#"Added Index",Table.ToRows(ColumnRenames), MissingField.Ignore)
in
#"Renamed Columns1"
CheckInput (just a oneliner, without let .. in):
Table.SelectRows(ColumnRenames, each not List.Contains(Table.ColumnNames(GetInput),[To]))
- ovetteabejuela9 years ago
Impactful Individual
MarcelBeug, I have yet to try but I can see where you're going and I already think that this is an awesome approach. I will try and get back to this thread and will flag it as a solution when everything works.
Thanks again for the elaborate assistance.