cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
freedumz
Helper II
Helper II

Make a distinct with many columns (like in SQL)

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

1 ACCEPTED SOLUTION

Accepted Solutions
v-xida-msft
Community Support
Community Support

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:1.JPG

 

 

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

Community Support Team _ Kris Dai
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

6 REPLIES 6
Drrickryp
Super User
Super User

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".

nickduxfield
Responsive Resident
Responsive Resident

Depending on your needs,

 

  • Bring the source in to a collection with ShowColumns() function which strips out all the unneeded columns
  • Or Create another collection using the source collection with ShowColumns
  • You may even add a useful Distinct combined with Filter and ShowColumns
v-xida-msft
Community Support
Community Support

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:1.JPG

 

 

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

Community Support Team _ Kris Dai
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

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.

mLarenas
Frequent Visitor

HI, what an old post! but i have the same issue and that solution worked for me:

You must use the function GroupByTableColumnName1 [, ColumnName2, ... ], GroupColumnName )

This function group the data like SQL....

 

 

Helpful resources

Announcements
PA Virtual Workshop Carousel 768x460.png

Register for a Free Workshop

This training provides practical hands-on experience in creating Power Apps solutions in a full-day of instructor-led App creation workshop.

Microsoft Build 768x460.png

Microsoft Build is May 24-26. Have you registered yet?

Come together to explore latest innovations in code and application development—and gain insights from experts from around the world.

May UG Leader Call Carousel 768x460.png

What difference can a User Group make for you?

At the monthly call, connect with other leaders and find out how community makes your experience even better.

Top Solution Authors
Top Kudoed Authors
Users online (1,440)