web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / Sort gallery with mult...
Power Apps
Answered

Sort gallery with multiple fields

(0) ShareShare
ReportReport
Posted on by 144

I have a sharepoint list called: "Events", for all my events We have also a list called:"Locations".

 

In the list called events, it is a loockup field to "Locations" where the title describe the location of the event.   In the "Events" field we do also have 2 choice fields one for membership ("Gold";"Silver";"Bronze")  and one for branch ("IT", "Financials", "Production","Logistics").  The last field "Event manager" is a user field with lookup to Azure AD. 

 

I need to create a gallery, where i can sort on several values at the same time like "Locations";"Branch"; "Membership". or sort on "Event Manager", "Branch";"Location". 

 

I have tried SortByColums, but there is a problem sorting on sharepoint lookup fields, choice fields, or Person field.   What is the best practice and how should the formula look like to sort on several field at the same time.  It is a lot of items, so it must be a delegated sort (an mybe a filter). 

 

 

 

 

 

Categories:
  • yashag2255 Profile Picture
    24,769 Super User 2024 Season 1 on at

    Hi @TrulsB 

     

    In that you can build the expression as:
     
    SortByColumns(AddColumns(Events, "LocationName", Location.Name, "BranchName", Text(Branch), "MembershipName", Text(Membership), "ManagerName" , 'Event Manager'.FullName), "LocationName",Ascending, "BranchName",Ascending,"MembershipName",Ascending,"ManagerName",Ascending)
     
    Here, You need to first convert the lookup/choice type columns into simple text fields and then the sort can be performed easily.
     
    If this differs from what you are looking for, please share more details so that we might be able to help you better.
     
    Hope this Helps!
     
    If this reply has answered your question or solved your issue, please mark this question as answered. Answered questions helps users in the future who may have the same issue or question quickly find a resolution via search. If you liked my response, please consider giving it a thumbs up. THANKS!
  • TrulsB Profile Picture
    144 on at

    The formula looks good, but i get a delegation warning after i inserted text(  ... ) in the SortByColumn...It is a lot of items in the list  (more than 10 000 within a year).   How can i buypass the delegation problem? Is it to convert the actual lookup field to text field on the item level,  eg, i create a text field called LocationTxt and update this with values from the Location field ?

     

    The sharepoint form is modified with PowerApps and we have several apps on this list created in Powerapps.  If the solution is to create text fields used by SortByColumn, what is the best practice to update values in the text fields - with values from choce fields (Location -> LocationTxt). 

     

     

  • Verified answer
    RezaDorrani Profile Picture
    12,145 on at

    Hi @TrulsB 

     

    For lookups, choice and person

     

    Create equivalend text fields in the data source

    Probably - run a flow to first update all existsing items with the new text field columns

     

    Then in your existing form control in PowerApps, add the 3 new text columns and set their default values with respect to their associated columns and hide these columns on the form

     

    Next ensure to have column indexes created for all columns you are sorting and/or filtering on

    indexing ensures you do not run into the 5000 item issue

     

    And then ensure all your queries in powerapps support delegation

    http://rezadorrani.com/index.php/2019/09/18/powerapps-delegation-with-sharepoint-as-a-data-source-with-respect-to-all-column-types/#respond

     

    --------------------------------------------------------------------------------
    If this post helps answer your question, please click on “Accept as Solution” to help other members find it more quickly. If you thought this post was helpful, please give it a Thumbs Up.

  • v-xida-msft Profile Picture
    Microsoft Employee on at

    Hi @TrulsB ,

    Could you please share a bit more about the Delegation issue with your formula?

     

    If you want to sort your Gallery Items based on the Choice, LookUp, or Person type column using SortByColums function, I think there is no direct way to achieve your needs.

     

    As an alternative solution, I think the AddColumns function could achieve your needs. Please set the Items property of the Gallerty to following:

    SortByColumns(
    AddColumns(
    Events,
    "LocationName", LocationColumn.Value, /* LocationColumn represents the LookUp column in your SP list */
    "BranchName", BranchColumn.Value,
    "MembershipName", MembershipColumn.Value,
    "ManagerName" , 'Event Manager'.FullName
    ),
    "LocationName", Ascending,
    "BranchName", Ascending,
    "MembershipName", Ascending,
    "ManagerName", Ascending
    )

    Note: Please set the "Data row limit for Non-delegable queries" option within Advanced settings of App settings of your app to maximum value -- 2000.

    If the amount of your SP List records is not more than 2000, you could ignore the delegable warning issue within your above formula.

     

    Currently, within PowerApps, the complex type columns (e.g. Choice, LookUp, Person, ... etc) is not delegabled within SortByColumns function or Sort function. Please check the following article:

    https://docs.microsoft.com/en-us/connectors/sharepointonline/#powerapps-delegable-functions-and-operations-for-sharepoint

     

    If the amount of your SP list records is more than 2000, please consider take a try with the following workaround:

    1. Add a Calculated type column -- 'IndexRow' within your SP list, set the Formula to following:2.JPG

    2. Then you could bulk-load your SP list records into your app based on the 'IndexRow':

    Set the OnStart property of the App to following (I assume that there are 10000 records existed in your SP List😞

    Concurrent(
     Collect(Col1, Filter(Events, Value(IndexRow)>=1 && Value(IndexRow)<=2000)),
    Collect(Col2, Filter(Events, Value(IndexRow)>=2001 && Value(IndexRow)<=4000)),
    Collect(Col3, Filter(Events, Value(IndexRow)>=4001 && Value(IndexRow)<=6000)),
    Collect(Col4, Filter(Events, Value(IndexRow)>=6001 && Value(IndexRow)<=8000)),
    Collect(Col5, Filter(Events, Value(IndexRow)>=8001 && Value(IndexRow)<=10000)) );
    ClearCollect(MergedCollection, Col1, Col2, Col3, Col4, Col5)

    Then modify above Filter formula as below:

    SortByColumns(
     AddColumns(
     MergedCollection, 
     "LocationName", LocationColumn.Value, /* LocationColumn represents the LookUp column in your SP list */
     "BranchName", BranchColumn.Value, 
     "MembershipName", MembershipColumn.Value, 
     "ManagerName" , 'Event Manager'.FullName
     ), 
     "LocationName", Ascending, 
     "BranchName", Ascending,
     "MembershipName", Ascending,
     "ManagerName", Ascending
    )

    Please consider take a try with above solution, then check if the issue is solved.

     

    Also please check and see if the following thread would help in your scenario:

    https://powerusers.microsoft.com/t5/Building-PowerApps-Formerly/Pulling-in-large-ish-SQL-tables/m-p/243777#M71518

     

    Best regards,

  • Brendan_Val Profile Picture
    15 on at

    Thank you. Just helped me with this one. 

  • zuurg Profile Picture
    546 Super User 2024 Season 1 on at

    Hello,

     

    I'm in a situation where I have a large SharePoint list too and tried the above workaround using the concurrent collection, then merging them all.  Here's my code:

    Concurrent(
     ClearCollect(col1,Filter('Tracking', Value(IndexRow) > 1)),
     ClearCollect(col2,Filter('Tracking', Value(IndexRow) > 2000)),
     ClearCollect(col3,Filter('Tracking', Value(IndexRow) > 4000)),
     ClearCollect(col4,Filter('Tracking', Value(IndexRow) > 6000))
    );
    ClearCollect(colCombined,col1,col2,col3,col4)

    (I had previously tried the same ClearCollect that you had listed with Value(IndexRow)>=1 && Value(IndexRow)<=2000 ... and it produced the same result)

    The list in question currently contains 7720 records, so I know that col1, col2, and col3 should all have 2000 records, along with 1720 records in col4 but here's what I end up with instead:

    zuurg_0-1706213178903.png

    I've verified that the IndexRow column actually contains a copy of the ID column, so the filtering should work, but it doesn't.  

     

    Has something changed that I'm not aware of?  I've also tried moving the collection code to a screen's OnVisible property and to a button, it never loads anything into col3 or col4 and only partially loads col2.  I have the max records set to 2000 in the app's settings.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Winners!

Congratulations to our community stars!

Kudos to our 2025 Community Spotlight Honorees

Expanding mentorship, skilling, and AI innovation

Leaderboard > Power Apps

#1
11manish Profile Picture

11manish 342 Super User 2026 Season 2

#2
M Bilal Khan Profile Picture

M Bilal Khan 271

#3
Mohsin Ali Profile Picture

Mohsin Ali 223

Last 30 days Overall leaderboard