cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Dpalmer
Helper III
Helper III

Creating a Sorted Collection

Hello,

I'm using a SQL datasource and want to create a collection. The datasource has a "StartDayTime" field that is a datetime type.

I want the collection to be created with 1) the first record to be the earliest "StartDayTime" and 2) Each row of the collection to have an ascending row number for each record in the collection.

So the source data might look like this:

Dpalmer_1-1678766024806.png

And I want the resulting collection to be ordered like this with the additional column of row number:

Dpalmer_2-1678766221289.png

Any help would be greatly appreciated. 

Thanks,

David

 

1 ACCEPTED SOLUTION

Accepted Solutions

The documentation of "ForAll" states, "When writing your formula, keep in mind that records can be processed in any order and, when possible, in parallel. The first record of the table may be processed after the last record."

Therefore I question Vishal's solution. This would work regardless of the order in which the items were processed:

 

Clear(SomeCollection);
With({
  SortedTable: Sort(
    YourDataSource,
    StartDayTime
  )
},
  ForAll(Sequence(CountRows(SortedTable)),
    Collect(SomeCollection,
      {
        Index:Value,
        StartDayTime:Index(SortedTable,Value).StartDayTime
      }
    )
  )
)

 

 

View solution in original post

7 REPLIES 7
AbdulWahab
Continued Contributor
Continued Contributor

Hi @Dpalmer ,

 

The link: https://www.matthewdevaney.com/powerapps-collections-cookbook/sort-a-collection-by-one-or-more-colum... might be the solution to your problem.

 

If you need additional help please tag me in your reply and please like my reply.

 

If my reply provided you with a solution, pleased mark it as a solution

 

Thanks
Regards,

 

Abdul Wahab
Power Platform & Customer Engagement Developer/Lead/Solution Architecture/Project Manager
Direct/WhatsApp:+923323281237
E-mail: abdulwahabubit@outlook.com
Skype: abdul.wahabubit
Linkedin: https://www.linkedin.com/in/abdul-wahab-a5b8b011a/
Youtube Channel: https://www.youtube.com/channel/UCBjgLqLK_2kU-3bwo4McrTw

VishalJhaveri
Impactful Individual
Impactful Individual

Please try this :

ClearCollect(col1, SortByColumns(SqlSource, datecolumntosortby, "Ascending"));


ForAll(col1,
           Collect(col2,
          Patch(Last(FirstN(col1, CountRows(col2)+1)),
           { RowNumber: CountRows(col2)+1})
        )
)


Thank you.
If my answer helps you, please mark it as solution.

The documentation of "ForAll" states, "When writing your formula, keep in mind that records can be processed in any order and, when possible, in parallel. The first record of the table may be processed after the last record."

Therefore I question Vishal's solution. This would work regardless of the order in which the items were processed:

 

Clear(SomeCollection);
With({
  SortedTable: Sort(
    YourDataSource,
    StartDayTime
  )
},
  ForAll(Sequence(CountRows(SortedTable)),
    Collect(SomeCollection,
      {
        Index:Value,
        StartDayTime:Index(SortedTable,Value).StartDayTime
      }
    )
  )
)

 

 

Thank you everyone for the responses!!!

The solution that @sopatte provided worked.  I didn't try the other recommended solutions for one reason, countrows() is non-delegable for SQL as a data source.

One last addition to this now that I can get the collection data correctly, in your solution @sopatte , I also now want to only collect records between a certain StartDayTime and (another column in the collection) EndDayTime. Just not sure where that filter would go in the code you provided.

I am so appreciative of your help!!!!!

Thanks,

David

Dpalmer
Helper III
Helper III

Update: I did figure out how to add the filter:

SortedTable: Sort(Filter(MySQLTable, DateValue(StartDayTime) > _minDate && DateValue(EndDayTime) < _maxDate),StartDayTime)},

But here's the issue, again, SQL does not like doing that comparison in the Filter.  Give a delegation warning that it may not work on large data sets.

Thoughts?
Thanks,

David

Liberal use of the With() function can really help prevent complex calculations inside your filters. 

Clear(SomeCollection);
With({
  SortedTable: Sort(
    YourDataSource,
    StartDayTime
  )
},With({
  RowNumbers: Sequence(CountRows(SortedTable))
},
  ForAll(RowNumbers),
    Collect(SomeCollection,
      {
        Index:Value,
        StartDayTime:Index(SortedTable,Value).StartDayTime
      }
    )
  )
)) // end nested Withs

You could also try setting a variable to compare to.  

When it comes to complex calculations involving actual table rows, in the past I've done multiple levels of filtering...so retrieve a larger number of rows from a Datasource into a local Collection, then filter those down from there. It really depends on how many rows you expect to be dealing with, because you don't want to be running up against record count limits. I hope this helps.

MyEmail = User().Email;
Collect(MyData,
  Filter(UserData,
    'Created By'.Email = MyEmail
  )
); // this is expected to be on the order of 3 to 10 records and couldn't possibly be hundreds.

Another possibility is to use a sort of inline multi-level filtering but again you have to make sure your first filter isn't going to be in the thousands of records.

Do you need to use the DateValue() function? Isn't the column type already a DateValue?

Thanks these are good ideas around the With function.

For now I've just created an integer column in the data table, a computed column based on the date, so datetime "03/14/2023 08:30:00.000" would be integer 20230314. I can then use that in the Filter condition.

I appreciate the help, you got me moved forward with my project tremendously.

Thanks!

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!   This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions in the Forums to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber of SolutionsSuper UsersNumber of Solutions @anandm08  23 @WarrenBelz  31 @DBO_DV  10 @Amik  19 AmínAA 6 @mmbr1606  12 @rzuber  4 @happyume  7 @Giraldoj  3@ANB 6 (tie)   @SpongYe  6 (tie)     Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersSolutionsSuper UsersSolutions @anandm08  10@WarrenBelz 25 @DBO_DV  6@mmbr1606 14 @AmínAA 4 @Amik  12 @royg  3 @ANB  10 @AllanDeCastro  2 @SunilPashikanti  5 @Michaelfp  2 @FLMike  5 @eduardo_izzo  2   Meekou 2   @rzuber  2   @Velegandla  2     @PowerPlatform-P  2   @Micaiah  2     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 3:Community MembersSolutionsSuper UsersSolutionsPower Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27     Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8   SunilPashikanti8

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (1,020)