I have a SQL sourced dataset with the following format that needs to be parced, re-structured, and have duplicates removed. I don't have access to change the SQL server, and I would prefer to keep this in PowerApps instead of setting up a flow.
Problem: "Heat No": output is being stored as a column of tables instead of a column of values. This is also getting pretty messy and I keep wondering if there is a more elegent way (such as ForAll?) to do this transformation.
Incoming Format:
Description | Planner | Job | … |
** HEAT NUMBER 1235 ** | A | 3 | |
** HEAT NUMBER 1236 ** CCP ** | B | 5 | |
** HEAT NUMBER 1237 ** | B | 7 | |
** HEAT NUMBER 1237 ** | B | 9 |
Target Format:
Heat Number | Planner |
1235 | A |
1236 | B |
1237 | B |
Current Code:
//Copy SQL to buffer ClearCollect(DataImport_JobListBuffer,'[MFGHEAT].[WIPDATA]'); //Tried to filter this directly without success. Seems you need to buffer data in //Filter buffer ClearCollect(DataImport_HeatList,Filter(DataImport_JobListBuffer,'A$Organization_Code'="NWT",ITEM_PLANNER_CODE<>"NWT3")); //Parse out heat number ClearCollect(DataImport_HeatList2,Substitute(DataImport_HeatList.Description,"**HEAT NUMBER","")); ClearCollect(DataImport_HeatList2,Substitute(DataImport_HeatList2.Description,"**CPP**","")); ClearCollect(DataImport_HeatList2,Substitute(DataImport_HeatList2.Description,"**CRP**","")); ClearCollect(DataImport_HeatList2,Substitute(DataImport_HeatList2.Description,"**","")); //Add columns back in ClearCollect(DataImport_HeatList3,AddColumns(DataImport_HeatList,"Heat No",DataImport_HeatList2.Description)); //Remove duplicates //ClearCollect(DataImport_HeatList4,Distinct(DataImport_HeatList3,Heat No));
Solved! Go to Solution.
I did a quick test on my side and here's what I came up with:
ClearCollect( DataImport_JobListBuffer, '[MFGHEAT].[WIPDATA]' ); Distinct( ClearCollect( _DataImport_HeatList, AddColumns( Filter( DataImport_JobListBuffer, 'A$Organization_Code' = "NWT", ITEM_PLANNER_CODE <> "NWT3" ), "Heat Number", Concat( Filter( Split( Description, "" ), IsMatch( Result, "^[0-9]*" ) ), Result ) ) ), 'Heat Number' )
which gave me this:
I did a quick test on my side and here's what I came up with:
ClearCollect( DataImport_JobListBuffer, '[MFGHEAT].[WIPDATA]' ); Distinct( ClearCollect( _DataImport_HeatList, AddColumns( Filter( DataImport_JobListBuffer, 'A$Organization_Code' = "NWT", ITEM_PLANNER_CODE <> "NWT3" ), "Heat Number", Concat( Filter( Split( Description, "" ), IsMatch( Result, "^[0-9]*" ) ), Result ) ) ), 'Heat Number' )
which gave me this:
In addition to @hnguy71 's suggestion, you can also look at applying GroupBy to achieve these same results.
I'm not entirely sure from your sample data if the Planner is unique as well. In other words - if there was a ** HEAT NUMBER 1237 ** with Planner A possibility or not.
So, if the above is not true, then you can consider this formula for your testing (I assume you want this in a collection for some reason, so I will construct with one):
ClearCollect(HeatList, DropColumns( GroupBy( AddColumns( Filter('[MFGHEAT].[WIPDATA]', 'A$Organization_Code' = "NWT" && ITEM_PLANNER_CODE <> "NWT3" ), "HeatNumber", Match(Description, MultipleDigits).FullMatch ), "HeatNumber", "Planner", "Records" ), "Records" ) )
Based on your supplied data, this produces a collection called HeatList with three records -
HeatNumber Planner
1235 A
1236 B
1237 B
I hope that is clear and helpful for you.
Thanks @RandyHayes , this worked well too and is a pretty elegent solution. I am going to have to find a way to manipulate my downstream app to move in this direction.
Thanks @hnguy71 , this worked well and gets me going!
User | Count |
---|---|
137 | |
128 | |
75 | |
73 | |
69 |
User | Count |
---|---|
220 | |
135 | |
78 | |
58 | |
55 |