Forum Discussion
Lookup values between two tables
- 4 years ago
Hi LesG01stn ,
If the '*' character is not removed, it will look for the text "*API failed*" instead of "API failed".
I found a wrong column name in the code, please try the following code, it should return the correct value.
let Source = Excel.Workbook(File.Contents("C:\Users\lesgo\OneDrive - CCBAGROUP\OrderHeader.xlsx"), null, true), Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"(Do Not Modify) Order", type text}, {"(Do Not Modify) Row Checksum", type text}, {"(Do Not Modify) Modified On", type datetime}, {"Account Number (Customer) (Account)", Int64.Type}, {"Customer", type text}, {"Order Category", type text}, {"Sales Order Number", Int64.Type}, {"Source Channel", type text}, {"Created On", type datetime}, {"Requested Delivery Date", type datetime}, {"Planned Delivery Date", type date}, {"Total Amount", type number}, {"Order Quantity (Cases)", Int64.Type}, {"Created By", type text}, {"Status", type text}, {"Status Reason", type text}, {"Submission Status", type text}, {"Validation Outcome", type text}, {"Error Description", type text}, {"Integration Error", type text}, {"Delivery Location", type text}, {"Operational Site", type text}, {"Full Name (Account Manager) (Worker)", type text}, {"Sales Office (Customer) (Account)", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"(Do Not Modify) Order", "(Do Not Modify) Row Checksum", "(Do Not Modify) Modified On"}), varErrorMap = Table.Buffer ( ErrorLookUp ), varLookFor = List.Buffer ( List.Transform ( varErrorMap[LookFor], each Text.Lower ( Text.Replace ( _, "*", "") ) ) ), AddList = Table.AddColumn(#"Removed Columns", "Fault" as text, (t) => let i = List.PositionOf ( varLookFor, List.First ( List.Select ( varLookFor, each Text.Contains ( Text.Lower ( t[Error Description] ), _ ) ) ) ) in try varErrorMap[FaultType]{i} otherwise null ) in AddListIf the problem is still not resolved, please provide detailed error information or the expected result you expect. Let me know immediately, looking forward to your reply.
Best Regards,
Winniz
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Slowly but surely I am getting there... thanks so much for your patience.
Your code adds three columns in my Applied Steps, varErrorMap; varLookFor & AddList.
When I select either of the Varxxx steps I get the following error "Expression.Error: The name 'LookFor' wasn't recognized. Make sure it's spelled correctly."
When I select the new AddList there is a new column called Fault in the table with Function in each row.
If I select Function of any of the rows, a popup dialogue box appears
I then get the following
which takes me to the varErrorMap step... So 'LookFor' is the error.
Every method I have tried in the past gives me this error but I don't know how to rectify??
Hi LesG01stn ,
The 'LookFor' used by jennratten in varErrorMap = Table.Buffer ( LookFor ) is actually your ErrorLookup table name, so you need to change the code to
varErrorMap = Table.Buffer ( ErrorLookup )
Also, when there are no matches, you need to return null, so please change:
in varErrorMap[FaultType]{i}, type text -> in try varErrorMap[FaultType]{i} otherwise null
If the problem is still not resolved, please provide detailed error information or the expected result you expect. Let me know immediately, looking forward to your reply.
Best Regards,
Winniz
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
- LesG01stn4 years agoFrequent Visitor
OK... now, it is starting to make sense. Thank you so much (also jennratten), you are making murky waters look a bit clearer.. Unfortunately, I overwrote the report in error, but have recreated from scratch, so the code has changed slightly.
= Table.AddColumn( "Fault" as text, (t) => let i = List.PositionOf ( varLookFor, List.First ( List.Select ( varLookFor, each Text.Contains ( Text.Lower ( t[ErrorDescription] ), _ ) ) ) ) in try varErrorMap[FaultType]{i} otherwise null )This is now what the insert column code looks like, but I get the following error which I know refers to the required formula syntax
This is now the total code
let Source = Excel.Workbook(File.Contents("C:\Users\lesgo\OneDrive - CCBAGROUP\OrderHeader.xlsx"), null, true), Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"(Do Not Modify) Order", type text}, {"(Do Not Modify) Row Checksum", type text}, {"(Do Not Modify) Modified On", type datetime}, {"Account Number (Customer) (Account)", Int64.Type}, {"Customer", type text}, {"Order Category", type text}, {"Sales Order Number", Int64.Type}, {"Source Channel", type text}, {"Created On", type datetime}, {"Requested Delivery Date", type datetime}, {"Planned Delivery Date", type date}, {"Total Amount", type number}, {"Order Quantity (Cases)", Int64.Type}, {"Created By", type text}, {"Status", type text}, {"Status Reason", type text}, {"Submission Status", type text}, {"Validation Outcome", type text}, {"Error Description", type text}, {"Integration Error", type text}, {"Delivery Location", type text}, {"Operational Site", type text}, {"Full Name (Account Manager) (Worker)", type text}, {"Sales Office (Customer) (Account)", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"(Do Not Modify) Order", "(Do Not Modify) Row Checksum", "(Do Not Modify) Modified On"}), varErrorMap = Table.Buffer ( ErrorLookUp ), varLookFor = List.Buffer ( List.Transform ( varErrorMap[LookFor], each Text.Lower ( Text.Replace ( _, "*", "") ) ) ), AddList = Table.AddColumn( "Fault" as text, (t) => let i = List.PositionOf ( varLookFor, List.First ( List.Select ( varLookFor, each Text.Contains ( Text.Lower ( t[ErrorDescription] ), _ ) ) ) ) in try varErrorMap[FaultType]{i} otherwise null ) in AddList- v-kkf-msft4 years agoCommunity Support
Hi LesG01stn ,
The syntax of Table.AddColumn is as follows, the first parameter 'table' is missing in your code.
Table.AddColumn(table as table, newColumnName as text, columnGenerator as function, optional columnType as nullable type) as table
So please try the following code.
= Table.AddColumn( #"Removed Columns", "Fault" as text, (t) => let......)
let Source = Excel.Workbook(File.Contents("C:\Users\lesgo\OneDrive - CCBAGROUP\OrderHeader.xlsx"), null, true), Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"(Do Not Modify) Order", type text}, {"(Do Not Modify) Row Checksum", type text}, {"(Do Not Modify) Modified On", type datetime}, {"Account Number (Customer) (Account)", Int64.Type}, {"Customer", type text}, {"Order Category", type text}, {"Sales Order Number", Int64.Type}, {"Source Channel", type text}, {"Created On", type datetime}, {"Requested Delivery Date", type datetime}, {"Planned Delivery Date", type date}, {"Total Amount", type number}, {"Order Quantity (Cases)", Int64.Type}, {"Created By", type text}, {"Status", type text}, {"Status Reason", type text}, {"Submission Status", type text}, {"Validation Outcome", type text}, {"Error Description", type text}, {"Integration Error", type text}, {"Delivery Location", type text}, {"Operational Site", type text}, {"Full Name (Account Manager) (Worker)", type text}, {"Sales Office (Customer) (Account)", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"(Do Not Modify) Order", "(Do Not Modify) Row Checksum", "(Do Not Modify) Modified On"}), varErrorMap = Table.Buffer ( ErrorLookUp ), varLookFor = List.Buffer ( List.Transform ( varErrorMap[LookFor], each Text.Lower ( Text.Replace ( _, "*", "") ) ) ), AddList = Table.AddColumn(#"Removed Columns", "Fault" as text, (t) => let i = List.PositionOf ( varLookFor, List.First ( List.Select ( varLookFor, each Text.Contains ( Text.Lower ( t[ErrorDescription] ), _ ) ) ) ) in try varErrorMap[FaultType]{i} otherwise null ) in AddListIf the problem is still not resolved, please provide detailed error information or the expected result you expect. Let me know immediately, looking forward to your reply.
Best Regards,
Winniz
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.- LesG01stn4 years agoFrequent Visitor
Thanks so much... We now get a result BUT
= Table.AddColumn(#"Removed Columns", "Fault" as text, (t) => let i = List.PositionOf ( varLookFor, List.First ( List.Select ( varLookFor, each Text.Contains ( Text.Lower ( t[ErrorDescription] ), _ ) ) ) ) in try varErrorMap[FaultType]{i} otherwise null )only produces null. The function does not lookup the values to return a fault.
Is there any reason why the "*" values were removed from the look for strings?
varLookFor = List.Buffer ( List.Transform ( varErrorMap[LookFor], each Text.Lower ( Text.Replace ( _, "*", "") ) ) )Let me try explain my logic...
I have a table with sales orders that have been created. In this table there is a field called Error Description. This field has very lengthy strings explaining the error. I want to look up *lookupvalue* from a table called ErrorTypes and if the lookup value is found in the string, then the fault type in the column next to the look up value must be reported