Hi everyone
I'd like to do a distinct with many columns like we can do in SQL so to do simple, this a small example:
I'have this table
USA Max
USA Max
USA Bob
Canada Luc
Canada Max
Canada Bob
Canada Bob
And I'd like to get:
USA Max
USA Bob
Canada Luc
Canada Bob
Canada Max
Any idea of Could I do that on Powerapps?
Thanks for your help
Solved! Go to Solution.
Hi @freedumz,
Could you please share a bit more about your table?
I have made a test on my side, please take a try with the following wortkaround:
Set the OnVisbile property of the first screen to following formula:
ClearCollect( BaseTable, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Bob"}, {Country:"Canada",Name:"Luc"}, {Country:"Canada",Name:"Max"}, {Country:"Canada",Name:"Bob"}, {Country:"Canada",Name:"Bob"} )
Note: The BaseTable represents the source table that you mentioned. On your side, you could use ShowColumns function to get the columns that you want to get (strips out all the unneeded columns).
Set the OnSelect property of the "Modify" button (Button control) to following formula:
ClearCollect(Collection1,RemoveIf(RenameColumns(RenameColumns(BaseTable,"Country","Country1"),"Name","Name1"),CountRows(Filter(BaseTable,Name=Name1&&Country=Country1))>1));
ForAll( RenameColumns(RenameColumns(BaseTable,"Country","Country1"),"Name","Name1"), If( CountRows(Filter(BaseTable,Country=Country1&&Name=Name1))>1&&IsEmpty(Filter(Collection2,Name=Name1&&Country=Country1)), Collect(Collection2,LookUp(BaseTable,Country=Country1&&Name=Name1)) ) ); ForAll(RenameColumns(RenameColumns(Collection2,"Name","Name2"),"Country","Country2"),Patch(Collection1,Defaults(Collection1),{Name1:Name2,Country1:Country2}))
Set the Items property of the Data table control to following formula:
RenameColumns(RenameColumns(Collection1,"Name1","Name"),"Country1","Country")
Note: The Collection1 represents the data table that you want to get.
Best regards,
Kris
Add a column to the table that concatenates the two original columns and apply the distinct function to get the result.
Distinct(AddColumns(DataSource,"country_name",Trim(Country)&" "&Trim(FName)),country_name). This will give you a single column table with the column name "Result".
Depending on your needs,
Hi @freedumz,
Could you please share a bit more about your table?
I have made a test on my side, please take a try with the following wortkaround:
Set the OnVisbile property of the first screen to following formula:
ClearCollect( BaseTable, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Bob"}, {Country:"Canada",Name:"Luc"}, {Country:"Canada",Name:"Max"}, {Country:"Canada",Name:"Bob"}, {Country:"Canada",Name:"Bob"} )
Note: The BaseTable represents the source table that you mentioned. On your side, you could use ShowColumns function to get the columns that you want to get (strips out all the unneeded columns).
Set the OnSelect property of the "Modify" button (Button control) to following formula:
ClearCollect(Collection1,RemoveIf(RenameColumns(RenameColumns(BaseTable,"Country","Country1"),"Name","Name1"),CountRows(Filter(BaseTable,Name=Name1&&Country=Country1))>1));
ForAll( RenameColumns(RenameColumns(BaseTable,"Country","Country1"),"Name","Name1"), If( CountRows(Filter(BaseTable,Country=Country1&&Name=Name1))>1&&IsEmpty(Filter(Collection2,Name=Name1&&Country=Country1)), Collect(Collection2,LookUp(BaseTable,Country=Country1&&Name=Name1)) ) ); ForAll(RenameColumns(RenameColumns(Collection2,"Name","Name2"),"Country","Country2"),Patch(Collection1,Defaults(Collection1),{Name1:Name2,Country1:Country2}))
Set the Items property of the Data table control to following formula:
RenameColumns(RenameColumns(Collection1,"Name1","Name"),"Country1","Country")
Note: The Collection1 represents the data table that you want to get.
Best regards,
Kris
Hello,
Combining the answers of v-xida-msft and Drrickryp
You can also try this:
If BaseTable is your initial collection..
ClearCollect( BaseTable, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Max"}, {Country:"USA",Name:"Bob"}, {Country:"Canada",Name:"Luc"}, {Country:"Canada",Name:"Max"}, {Country:"Canada",Name:"Bob"}, {Country:"Canada",Name:"Bob"} )
Using this expression you have the data that you want.
Clear(BaseTable1);
ForAll(BaseTable,
If(
!LookUp(BaseTable1,BaseTable1[@Country]&BaseTable1[@Name]=BaseTable[@Country]&BaseTable[@Name],true),
Collect(BaseTable1,{Country:Country,Name:Name})))
and use the Basetable1
Or add to the expression above ClearCollect(BaseTable,BaseTable1) if you don't need BaseTable anymore and use the BaseTable collection.
Wow, these other solutions may work but seem unnecessarily complicated. I used your original data and added the trim functions because there were spaces in the data but otherwise achieved the result you requested.
HI, what an old post! but i have the same issue and that solution worked for me:
You must use the function GroupBy( Table, ColumnName1 [, ColumnName2, ... ], GroupColumnName )
This function group the data like SQL....
The first Microsoft-sponsored Power Platform Conference is coming in September. 100+ speakers, 150+ sessions, and what's new and next for Power Platform.
This training provides practical hands-on experience in creating Power Apps solutions in a full-day of instructor-led App creation workshop.
User | Count |
---|---|
208 | |
47 | |
43 | |
41 | |
36 |
User | Count |
---|---|
290 | |
85 | |
81 | |
79 | |
75 |