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

5 REPLIES 5
Drrickryp
Super User II
Super User II

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.

View solution in original post

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.

Helpful resources

Announcements
PA User Group

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

secondImage

Demo Extravaganza Winner Announcement

Please join us on Wednesday, July 21st at 8a PDT. We will be announcing the Winners of the Demo Extravaganza!

V3_PVA CAmpaign Carousel.png

Community Challenge - Giveaways!

Participate in the Power Virtual Agents Community Challenge

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

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