cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
bkatz
Helper I
Helper I

Populating a new record with the field data from the last record submitted in SQL DB by that user

Relatively new to powerapps but I have created an app for doing site inspections (which I know is a common use) and I am incorporating mileage tracking into the app.  

 

Data is in SQL:  Table name : MileageTrackertoSQL which contains fields:

Starting_Mileage

Ending_Mileage

Starting_Location

Ending_Location

Date_and_Time

Username

ID  (Key)

Date_Created

 

In Powerapps I have a form which asks for all of these fields.  What I want is that when a user opens the form, the "Ending Location" from the most recent record (for that user) to populate the "Starting_Location" combobox default and the "Ending_Mileage" from the same record to populate the "Starting_Mileage" field text input default for the new record.  

 

I have tried to do it as a collection to collect each item from the Last record but it doesn't seem to be working because regardless of using First or Last I get the ID=1 record first.  I understand the delegation limits but if I sort by ID descending the record I want for each user should be in the top 500.  

 

When I use First or last (proceeding this) the top 5 shown are always the records starting with ID=1 instead of last record ID=499 (currently).  Just trying to get the most recent records into collection and then I want to filter by the "username" field by the logged in user using the Office365Users.MyProfile().DisplayName which matches the list of usernames. Or I could filter first and then pull the records, which ever is easiest from a processing perspective.  

 

I tried Onvisible for the form screen: 

ClearCollect(LastRecord, '[dbo].[MileageTrackertoSQL]')

 

Any help would be greatly appreciated.  

 

Thank you!

 

 

 

 

 

 

 

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
v-xiaochen-msft
Community Support
Community Support

Hi @bkatz ,

 

The first() function does trigger a delegation warning.

However, when you have a lot of data, the first() function still works.

For example: when you have 3000 records, the last() function can only find the 2000th record due to delegation.

However, although the first() function has a delegation warning, it can still find the first record.

It's just a warning, it will not affect the performance of the application.

 

In addition, If you just want to eliminate this warning, you could try to use other methods instead of the first() function. Because the first() function has a delegate warning.

 

I think you could use max() function instead of first() function.

Its logic is:

1\ Use the filter() function to find all records of a certain user.

2\ Use the max function on the ID column. // find the max ID of a certain user

3\ Lookup the latest record by the max ID.

v-xiaochen-msft_0-1609987624461.png

 

 

For example:

LookUp(Filter('[dbo].[MileageTrackertoSQL]',Username=User().FullName),ID=Max(Filter('[dbo].[MileageTrackertoSQL]',Username=User().FullName),ID))

v-xiaochen-msft_1-1609987624464.png

 

 

However, user().fullname still has a delegation warning. Although it will not affect formula performance.

If you use Office365Users.MyProfile().DisplayName, It also has delegation warning.

Although the delegation warning for the first() function is gone, you still have other delegation warnings.

v-xiaochen-msft_2-1609987624465.png

 

 

Therefore, you don’t have to worry about delegation warnings, some functions will not affect the performance of your formulas.

 

Best Regards,

Wearsky

If my post helps, then please consider Accept it as the solution to help others. Thanks.

View solution in original post

11 REPLIES 11
v-xiaochen-msft
Community Support
Community Support

Hi @bkatz ,

 

Could you tell me:

  1. Do you use SQL Server ?
  2. What are the data types of these columns?
  3. Why did you put the data in the collection first? (Could the controls be directly associated with the data source instead of the collection?)
  4. Do you want to get the latest record?
  5. How many records do you have?

 

I assume:

1\ This is my hypothetical test columns. The ID column is the primary key and will increase by 1.

v-xiaochen-msft_0-1609312161842.png

 

 

2\ This is my test data

v-xiaochen-msft_1-1609312161843.png

 

 

I've made a test for your reference:

1\ Add a edit form and set its Datasource property to:

'[dbo].[MileageTrackertoSQL]'   // my table name

 

2\ Add an icon and set its onselect property to:

NewForm(Form1)  //  my edit form name

 

3\ Set the combo box control’s Items property to:

'[dbo].[MileageTrackertoSQL]'.Ending_Location

 

Set the combo box control’s DefaultSelectedItems property to:

Last('[dbo].[MileageTrackertoSQL]'.Ending_Location)

 

Set the “Starting_Location” card’s update property to:

ComboBox1.Selected.Ending_Location   // combobox1 is my combobox’s name

 

4\ Set the textinput control ’s Default property of “Starting_Mileage” to:

Last('[dbo].[MileageTrackertoSQL]').Ending_Mileage

 

5\ The Result is as follows:

III.gif

 

If my assumptions are incorrect, please provide more details.

 


Best Regards,
Wearsky
If my post helps, then please consider Accept it as the solution to help others. Thanks.

Thank you for the quick reply I've answered your questions below:

 

Could you tell me:

  1. Do you use SQL Server ?  yes
  2. What are the data types of these columns? The mileage columns are numeric(38,0), the locations are varchar(50), date and time is datetime, date created also datetime and ID is smallint.
  3. Why did you put the data in the collection first? (Could the controls be directly associated with the data source instead of the collection?) There is no need to do this, I just thought it might be an easy approach.  
  4. Do you want to get the latest record? As you mentioned elsewhere ID is my primary key and increments by one each time.  I want to get the "highest" ID number for that individual and return the details of that record.  
  5. How many records do you have? There will be a lot of records over time (certainly will exceed the 2000 threshold over the year).  There are ~20 people entering 6-7 entries a day so it won't take long to exceed the 2000.  If we sort by date created (latest) we should never be looking for something that is more than 100 records down.  

I will review the rest of your entry now but wanted to answer your questions in case it changes anything.  

 

I will experiment with what you have here but I think it will give me the last record regardless of who entered it and I do want to get that user's last entry details if possible. 

 

Also, while I do want the field to default to this entry I want the user to have the ability to change the entry to (in the case of location) my list of locations and (in the case of mileage) a different number (if for whatever reason they made a mistake previously or are entering records out of order).  I think for that to be the case the starting location and ending location "items" still need to be my location list which is currently: SortByColumns('[dbo].[SitesList]', "Name").Name

 

Thank you again!

For some reason my reply seems to have disappeared but I'll try to recreate it :

 

Could you tell me:

  1. Do you use SQL Server ?  Yes
  2. What are the data types of these columns?  

    Starting_Mileage numeric (38,0)

    Ending_Mileage numeric (38,0)

    Starting_Location varchar(50)

    Ending_Location varchar(50)

    Date_and_Time datetime

    Username varchar(50)

    ID  (Key)  smallint

    Date_Created datetime

  3. Why did you put the data in the collection first? (Could the controls be directly associated with the data source instead of the collection?) No need to do this, thought it would be easier.  
  4. Do you want to get the latest record?  I want the latest record by the username (logged in)
  5. How many records do you have? will be many records, ~20 people, 6-7 records per day 5 days a week.  If we start with a sort descending by ID number we should never be more than ~50 records down each time.  

 

I assume:

1\ This is my hypothetical test columns. The ID column is the primary key and will increase by 1.  Yes

 

I also noted in my previous reply that I want the default to be to the details of that most recent record by I still need the items and search items in the "locations" fields to be for my longer list of sites: SortByColumns('[dbo].[SitesList]', "Name").Name so that that if they don't want to use the last record's data they can change to the full list and for the mileage fields I want them to be able to change the number if they don't like the default number (sometimes they enter their records out of order so want them to be able to change them if need be.  

 

Thank you again for your assistance!

 

Brian

v-xiaochen-msft
Community Support
Community Support

Hi @bkatz ,

 

According to your description, I think you want to filter records based on username column. Then you want to fill the “Starting_Mileage” column and “Starting_Location” column by default.

The filled content is based on the Ending_Mileage column and Ending_Location column in the latest record.

In addition, you also have a gallery to display all the records of a certain user.

When the user does not want the default value, he can select a record in the gallery control, and this record will fill the “Starting_Mileage” and “Starting_Location” columns in the edit form.

Finally, the user can also enter the value by himself instead of selecting any record.

 

If my understanding above is wrong, please let me know.

 

What I am confused about is why you use the combo box control. It can only be used for selection, not for input. So I think textinput control is more suitable for “Starting_Location” column.( Maybe you have a collection of locations not mentioned?)

 

I also suggest you to use User().FullName function instead of Office365Users connector.

 

Finally, could you tell me what steps your app has performed? Where did you encounter difficulties?

It would be better if you can provide pictures and formulas.

Looking forward to your reply

 

Best Regards,

Wearsky

Answers below inline:  

 

According to your description, I think you want to filter records based on username column.  Correct Then you want to fill the “Starting_Mileage” column and “Starting_Location” column by default. Correct

The filled content is based on the Ending_Mileage column and Ending_Location column in the latest record. Correct

In addition, you also have a gallery to display all the records of a certain user. Correct

When the user does not want the default value, he can select a record in the gallery control, and this record will fill the “Starting_Mileage” and “Starting_Location” columns in the edit form. This part I'm not following, sorry.   I don't allow the users to edit a record once it is submitted.  When they open a new form on screen: AddMileageEntry and form name: EditformMileage I want it to pre-populate the fields with the data mentioned above as the default while allowing the user to change either if they want to alter the default.  

Finally, the user can also enter the value by himself instead of selecting any record. Shouldn't be any editing of previous records only option to "view" them for historical data.  Gallery is called BrowseGalleryMileage and uses for items: 

SortByColumns(Filter('[dbo].[MileageTrackertoSQL]','UserfilterinputMileageRecords(Invisible)'.Text in Name_SP_List),"Date_and_Time",Descending)

 

Then there is a text box which is hidden from the user but defaults to a variable: varusname 

When app starts I create 2 variables: Set(varuser, Office365Users.MyProfile().Id);Set(varusname, Office365Users.MyProfile().DisplayName)

 

If my understanding above is wrong, please let me know.  

 

What I am confused about is why you use the combo box control. It can only be used for selection, not for input. So I think textinput control is more suitable for “Starting_Location” column.( Maybe you have a collection of locations not mentioned?)  This assumption is correct, there are ~400 site locations in another table: SortByColumns('[dbo].[SitesList]', "Name").Name so if they don't want the last location as their new starting location I still need them to choose from this list. 

 

I also suggest you to use User().FullName function instead of Office365Users connector. This is interesting, is there a reason for this?  Even when using the office365users connector data in a variable?  Currently when a new record is created there is a hidden field which uses the varusname variable to populate each record so this is where I'm trying to match between current user and records.  Is there a benefit to using the User().FullName?  

 

Finally, could you tell me what steps your app has performed? Where did you encounter difficulties?   Hopefully that helps describe the current state.  I think your solution is close, I just need to first filter the records by the user and then pull the data you included into the default of my combobox, correct?  I'm not certain how to combine the filter with the "Last" commands you have above.  I imagine it is filter first and then last.  Do I need to sort to make sure I'm looking at the most recent records to allow for more than 2000 to be searched or are Last and Filter both delegable together so it doesn't matter?  I attached an image of the form.  

It would be better if you can provide pictures and formulas.

Looking forward to your reply

v-xiaochen-msft
Community Support
Community Support

Hi @bkatz ,

 

Firstly, Both Office365Users.MyProfile().DisplayName and User().FullName can be used. They are equal. But User().FullName is a built-in function of canvas, which is more convenient to use. You could choose what you like.

v-xiaochen-msft_0-1609747024658.png

 

 

Secondly, you could use the filter() function first, then use the last() function.  (If a user has more than 2000 records, then you could try to use the filter() function→sortbycolumns (descending) function→first() function)

 

Thirdly, I've made a test for your reference:

1\ This is my data structure

v-xiaochen-msft_1-1609747024660.png

 

 

2\ This is my test location table .

v-xiaochen-msft_2-1609747024660.png

 

 

3\ This is my test data.

v-xiaochen-msft_3-1609747024661.png

 

 

4\ Add an edit form like the picture: Its DataSource property is : '[dbo].[MileageTrackertoSQL]'

v-xiaochen-msft_4-1609747024664.png

 

 

Remove the textinput control of ‘Starting_Location’ card and add a dropdown control.

Set the dropdown control’s Items property to:

SortByColumns('[dbo].[SitesList]',"Name")

 

Set the dropdown control’s Default property to:

First(SortByColumns((Filter('[dbo].[MileageTrackertoSQL]',Username=User().FullName)),"ID",Descending)).Ending_Location

 

Set ‘Starting_Location’ card’s Update property to:

Dropdown1.Selected.Name         //Dropdown1 is my dropdown control’s name

 

Set Default property of textinput control of Starting_Mileage’s card to:

First(SortByColumns((Filter('[dbo].[MileageTrackertoSQL]',Username=User().FullName)),"ID",Descending)).Ending_Mileage

 

Remove the textinput control of Ending_Location’ card and add a dropdown control.

Set the dropdown control’s Items property to:

SortByColumns('[dbo].[SitesList]',"Name")

 

Set ‘Ending_Location’ card’s Update property to:

Dropdown2.Selected.Name         //Dropdown2 is my dropdown control’s name

 

Set the Default property of the textinput control of the Username card to:

User().FullName

 

5\ Add an icon and set its onselect property to:

NewForm(Form2)

 

Add an icon and set its onselect property to:

SubmitForm(Form2)

 

6\ Add a gallery control and set its Items property to:

Filter('[dbo].[MileageTrackertoSQL]',Username=User().FullName)   // Modify the gallery control according to your needs

 

7\ The result is as follows:

v-xiaochen-msft_5-1609747024667.png

 

Best Regards,

Wearsky

If my post helps, then please consider Accept it as the solution to help others. Thanks.

Thank you.  I went through the listed steps and I do get delegation warnings in both fields.  I've experimented with the ordering of the operations the way you mentioned but I haven't found the correct ordering based on what you mentioned here: Secondly, you could use the filter() function first, then use the last() function.  (If a user has more than 2000 records, then you could try to use the filter() function→sortbycolumns (descending) function→first() function)

v-xiaochen-msft
Community Support
Community Support

Hi @bkatz ,

 

Could you tell me:

Where did you encounter the problem when you try my solution?

 

Did you say that you encountered a delegation warning in the formula below?

v-xiaochen-msft_0-1609903882944.png

 

If so, you don’t have to worry, it does not affect your app.

If not, please tell me where your application reported an error.

 

Best Regards,

Wearsky

If my post helps, then please consider Accept it as the solution to help others. Thanks.

I found the error which was that I had a combobox and not a drop down, when I swapped those it seems to have worked.  I am still getting delegation warnings, but are you saying that won't be an issue with this setup?  Is there a way to change the syntax to avoid the warning?  I think it is the First() that is saying isn't supported by the SQL connector.  I think we're really close just prefer to get to a place with no warnings.  Thank you again for helping me get this far.  

Helpful resources

Announcements

Exclusive LIVE Community Event: Power Apps Copilot Coffee Chat with Copilot Studio Product Team

  It's time for the SECOND Power Apps Copilot Coffee Chat featuring the Copilot Studio product team, which will be held LIVE on April 3, 2024 at 9:30 AM Pacific Daylight Time (PDT).     This is an incredible opportunity to connect with members of the Copilot Studio product team and ask them anything about Copilot Studio. We'll share our special guests with you shortly--but we want to encourage to mark your calendars now because you will not want to miss the conversation.   This live event will give you the unique opportunity to learn more about Copilot Studio plans, where we’ll focus, and get insight into upcoming features. We’re looking forward to hearing from the community, so bring your questions!   TO GET ACCESS TO THIS EXCLUSIVE AMA: Kudo this post to reserve your spot! Reserve your spot now by kudoing this post.  Reservations will be prioritized on when your kudo for the post comes through, so don't wait! Click that "kudo button" today.   Invitations will be sent on April 2nd.Users posting Kudos after April 2nd. at 9AM PDT may not receive an invitation but will be able to view the session online after conclusion of the event. Give your "kudo" today and mark your calendars for April 3rd, 2024 at 9:30 AM PDT and join us for an engaging and informative session!

Tuesday Tip: Unlocking Community Achievements and Earning Badges

TUESDAY TIPS are our way of communicating helpful things we've learned or shared that have helped members of the Community. Whether you're just getting started or you're a seasoned pro, Tuesday Tips will help you know where to go, what to look for, and navigate your way through the ever-growing--and ever-changing--world of the Power Platform Community! We cover basics about the Community, provide a few "insider tips" to make your experience even better, and share best practices gleaned from our most active community members and Super Users.   With so many new Community members joining us each week, we'll also review a few of our "best practices" so you know just "how" the Community works, so make sure to watch the News & Announcements each week for the latest and greatest Tuesday Tips!     THIS WEEK'S TIP: Unlocking Achievements and Earning BadgesAcross the Communities, you'll see badges on users profile that recognize and reward their engagement and contributions. These badges each signify a different achievement--and all of those achievements are available to any Community member! If you're a seasoned pro or just getting started, you too can earn badges for the great work you do. Check out some details on Community badges below--and find out more in the detailed link at the end of the article!       A Diverse Range of Badges to Collect The badges you can earn in the Community cover a wide array of activities, including: Kudos Received: Acknowledges the number of times a user’s post has been appreciated with a “Kudo.”Kudos Given: Highlights the user’s generosity in recognizing others’ contributions.Topics Created: Tracks the number of discussions initiated by a user.Solutions Provided: Celebrates the instances where a user’s response is marked as the correct solution.Reply: Counts the number of times a user has engaged with community discussions.Blog Contributor: Honors those who contribute valuable content and are invited to write for the community blog.       A Community Evolving Together Badges are not only a great way to recognize outstanding contributions of our amazing Community members--they are also a way to continue fostering a collaborative and supportive environment. As you continue to share your knowledge and assist each other these badges serve as a visual representation of your valuable contributions.   Find out more about badges in these Community Support pages in each Community: All About Community Badges - Power Apps CommunityAll About Community Badges - Power Automate CommunityAll About Community Badges - Copilot Studio CommunityAll About Community Badges - Power Pages Community

Tuesday Tips: Powering Up Your Community Profile

TUESDAY TIPS are our way of communicating helpful things we've learned or shared that have helped members of the Community. Whether you're just getting started or you're a seasoned pro, Tuesday Tips will help you know where to go, what to look for, and navigate your way through the ever-growing--and ever-changing--world of the Power Platform Community! We cover basics about the Community, provide a few "insider tips" to make your experience even better, and share best practices gleaned from our most active community members and Super Users.   With so many new Community members joining us each week, we'll also review a few of our "best practices" so you know just "how" the Community works, so make sure to watch the News & Announcements each week for the latest and greatest Tuesday Tips!   This Week's Tip: Power Up Your Profile!  🚀 It's where every Community member gets their start, and it's essential that you keep it updated! Your Community User Profile is how you're able to get messages, post solutions, ask questions--and as you rank up, it's where your badges will appear and how you'll be known when you start blogging in the Community Blog. Your Community User Profile is how the Community knows you--so it's essential that it works the way you need it to! From changing your username to updating contact information, this Knowledge Base Article is your best resource for powering up your profile.     Password Puzzles? No Problem! Find out how to sync your Azure AD password with your community account, ensuring a seamless sign-in. No separate passwords to remember! Job Jumps & Email Swaps Changed jobs? Got a new email? Fear not! You'll find out how to link your shiny new email to your existing community account, keeping your contributions and connections intact. Username Uncertainties Unraveled Picking the perfect username is crucial--and sometimes the original choice you signed up with doesn't fit as well as you may have thought. There's a quick way to request an update here--but remember, your username is your community identity, so choose wisely. "Need Admin Approval" Warning Window? If you see this error message while using the community, don't worry. A simple process will help you get where you need to go. If you still need assistance, find out how to contact your Community Support team. Whatever you're looking for, when it comes to your profile, the Community Account Support Knowledge Base article is your treasure trove of tips as you navigate the nuances of your Community Profile. It’s the ultimate resource for keeping your digital identity in tip-top shape while engaging with the Power Platform Community. So, dive in and power up your profile today!  💪🚀   Community Account Support | Power Apps Community Account Support | Power AutomateCommunity Account Support | Copilot Studio  Community Account Support | Power Pages

Super User of the Month | Chris Piasecki

In our 2nd installment of this new ongoing feature in the Community, we're thrilled to announce that Chris Piasecki is our Super User of the Month for March 2024. If you've been in the Community for a while, we're sure you've seen a comment or marked one of Chris' helpful tips as a solution--he's been a Super User for SEVEN consecutive seasons!       Since authoring his first reply in April 2020 to his most recent achievement organizing the Canadian Power Platform Summit this month, Chris has helped countless Community members with his insights and expertise. In addition to being a Super User, Chris is also a User Group leader, Microsoft MVP, and a featured speaker at the Microsoft Power Platform Conference. His contributions to the new SUIT program, along with his joyous personality and willingness to jump in and help so many members has made Chris a fixture in the Power Platform Community.   When Chris isn't authoring solutions or organizing events, he's actively leading Piasecki Consulting, specializing in solution architecture, integration, DevOps, and more--helping clients discover how to strategize and implement Microsoft's technology platforms. We are grateful for Chris' insightful help in the Community and look forward to even more amazing milestones as he continues to assist so many with his great tips, solutions--always with a smile and a great sense of humor.You can find Chris in the Community and on LinkedIn. Thanks for being such a SUPER user, Chris! 💪🌠

Tuesday Tips: Community Ranks and YOU

TUESDAY TIPS are our way of communicating helpful things we've learned or shared that have helped members of the Community. Whether you're just getting started or you're a seasoned pro, Tuesday Tips will help you know where to go, what to look for, and navigate your way through the ever-growing--and ever-changing--world of the Power Platform Community! We cover basics about the Community, provide a few "insider tips" to make your experience even better, and share best practices gleaned from our most active community members and Super Users.   With so many new Community members joining us each week, we'll also review a few of our "best practices" so you know just "how" the Community works, so make sure to watch the News & Announcements each week for the latest and greatest Tuesday Tips!This Week: Community Ranks--Moving from "Member" to "Community Champion"   Have you ever wondered how your fellow community members ascend the ranks within our community? What sets apart an Advocate from a Helper, or a Solution Sage from a Community Champion? In today’s #TuesdayTip, we’re unveiling the secrets and sharing tips to help YOU elevate your ranking—and why it matters to our vibrant communities. Community ranks serve as a window into a member’s role and activity. They celebrate your accomplishments and reveal whether someone has been actively contributing and assisting others. For instance, a Super User is someone who has been exceptionally helpful and engaged. Some ranks even come with special permissions, especially those related to community management. As you actively participate—whether by creating new topics, providing solutions, or earning kudos—your rank can climb. Each time you achieve a new rank, you’ll receive an email notification. Look out for the icon and rank name displayed next to your username—it’s a badge of honor! Fun fact: Your Community Engagement Team keeps an eye on these ranks, recognizing the most passionate and active community members. So shine brightly with valuable content, and you might just earn well-deserved recognition! Where can you see someone’s rank? When viewing a post, you’ll find a member’s rank to the left of their name.Click on a username to explore their profile, where their rank is prominently displayed. What about the ranks themselves? New members start as New Members, progressing to Regular Visitors, and then Frequent Visitors.Beyond that, we have a categorized system: Kudo Ranks: Earned through kudos (teal icons).Post Ranks: Based on your posts (purple icons).Solution Ranks: Reflecting your solutions (green icons).Combo Ranks: These orange icons combine kudos, solutions, and posts. The top ranks have unique names, making your journey even more exciting! So dive in, collect those kudos, share solutions, and let’s see how high you can rank! 🌟 🚀   Check out the Using the Community boards in each of the communities for more helpful information!  Power Apps, Power Automate, Copilot Studio & Power Pages

Find Out What Makes Super Users So Super

We know many of you visit the Power Platform Communities to ask questions and receive answers. But do you know that many of our best answers and solutions come from Community members who are super active, helping anyone who needs a little help getting unstuck with Business Applications products? We call these dedicated Community members Super Users because they are the real heroes in the Community, willing to jump in whenever they can to help! Maybe you've encountered them yourself and they've solved some of your biggest questions. Have you ever wondered, "Why?"We interviewed several of our Super Users to understand what drives them to help in the Community--and discover the difference it has made in their lives as well! Take a look in our gallery today: What Motivates a Super User? - Power Platform Community (microsoft.com)

Top Solution Authors
Top Kudoed Authors
Users online (6,987)