cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Anonymous
Not applicable

Q using Flow to write to an Azure SQL DB

Hi, I'm building an app that needs to write a number of text inputs to records in an Azure SQL DB. I'm finding that the current design of having a gallery with a text input in each card is very slow when writing to the database, to the tune of 5 seconds per card

 

it was mentioned to me to look at using flow as it should be able to do them in parllel.  I have created a flow for adding records to the database, however I also need to ad a condition where if the text inputs are a New record, that gets created, however if the record already exists in the database, it is simply updated with the new fields.

 

Is this possible with a single flow?

1 ACCEPTED SOLUTION

Accepted Solutions

Hi @Anonymous

Yes, you can use variables for the Default property of text inputs, but you cannot set a variable as this is an action.  You could do that in the OnChange property of the same text input for example. 

In any case, the discussion is really a little bit wider, in that the solution really depends on what you are trying to do.  I get the impression that the way you organise your data is also relevant.  The solution space is so large that it is difficult to be more precise without a clearer understanding of your business needs.  For example what determines the list of items: are the 'fruits' from a predetermined set that rarely changes, or can it be something completely different every day?  Does the user have to go through the complete list every day, or pick and choose?  Depending on this and other factors you could use a dropdown instead a text input, or just produce the list in labels.

However, I am confident that you can speed up the app performance.

View solution in original post

8 REPLIES 8
Meneghino
Community Champion
Community Champion

Hi, why not use the Patch or Collect functions coupled with ForAlll? It seems that flow would add an unnecessary complication.
Anonymous
Not applicable

Hi, sorry I didn't include the details.  Right now I'm using a forall statement wrapped around a patch. It works, but is slow when there are up to 14 text input boxes to save. Somewhere in the neighbourhood of 2 mins to save. For my users this would be unacceptable so looking for alternatives.

 

thanks

Dave

Hi @Anonymous

Just one more clarification: are the 14 text input boxes to populate:

  1. 14 fields of one record, or
  2. 1 field of 14 records, or
  3. a combination

If you are having performance issues then I imagine it is the second, but just wanted to make sure.

 

If you are creating new records, then performance should be much improved by doing a bulk operation using the Collect function instead of a Patch.  Something like:

Collect(MyDataSource, ShowColumns(AddColumns( MyGallery.AllItems, "MySQLColumName", MyTextInput.Text), "MySQLColumnName")))

Even if you are editing existing records, then you can use the Patch function in bulk mode, I think.  You just need to Fitler the records to be edited in the gallery and use those as the second argument.  Something like this:

 

Patch(MyDataSource,
     ShowColumns(Filter(MyGallery.AllItems, IsExisting), IDcolumn),
     RenameColumns(Filter(MyGallery.AllItems, IsExisting), etc. etc.)
     )

It would help if you could post your existing patch expression that works, albeit slowly, so that I can be more specific.

Anonymous
Not applicable

thanks again for the reply.

 

Your assumption of scenario 2 is valid, 14 gallery items each with a single text input field.

 

I tried converting the Patch statement over to the collect as you suggested, & it definetly is much faster, however it appears that because my data is in a gallery only the last number in the gallery is actually saved in the end with the new record. In my case, I need to get all 14 saved (each to their own new record).

 

Here is a condensed (3 gallery items instead of 14) version fo the code I'm using....

ForAll(ItemData.AllItems,
    Patch('[dbo].[TestDB]',
        If(IsBlank(LookUp('[dbo].[TestDB]', ItemName = Item && Text(SelectedDate, "[$-en-US]mm/dd/yyyy") = Date)), 
             Defaults('[dbo].[TestDB]'), 
             LookUp('[dbo].[TestDB]', ItemName = Item && Text(SelectedDate, "[$-en-US]mm/dd/yyyy") = Date)),
        {
        Date: Upper(Text(SelectedDate, "[$-en-US]mm/dd/yyyy")),
        Item: label_ItemName.Text, 
        Quantity: If(IsBlank(ti_Quantity.Text) || !IsNumeric((ti_Quantity.Text)),"0",ti_Quantity.Text), 
        }
        )
    )

 

Hi @Anonymous, thanks for clarifying.

 

The code you use is inefficient because:

1) There is one LookUp to TestDB for each item to see if item is already present

2) There is one call to Defaults for every new item, or another LookUp to TestDB for any existing item

3) The items are written one by one instead of in bulk

 

Here is the strategy to make this more efficient:

1) Do the LookUp as to whether the item is existing not when you write to the db, but in the gallery.  The exact way to do this will depend on what the primary key of table TestDB is.  What is it?

 

2) In the OnStart property of the first screen place this:

Set(TestDB_defaults, Defaults('[dbo].[TestDB]'))

You will need to restart the app for this to be loaded, but then you can substitute TestDB_defaults wherever you use the Defaults function.  Try it and see, this should already improve performance.

For existing items, the answer is linked to 1) above

 

3) We can do this last, once 1) and 2) are resolved.

 

One last comment, you say that you have 14 items (reduced to 3 in the example), but from the code it seems that it is 3 (or 14) columns, not items.  Can you please clarify?  Let's use the term item to indicate one entry/record in the database and column/field to indicate the elements of that one entry.

Anonymous
Not applicable

First off, thankyou very much for your patience & time; greatly appreciated.

 

Currently I populate the ti_Quantity text input box in the gallery by doing a lookup in the Default property of the text input. If I could set a variable in the same Default property, I could use it later as a flag to tell whether ti_Quantity was blank (indicating it should be a new record). Or I could also check the Key value (RecordID column in this case) to see if it is blank or not. I'm just not sure if it's possible to set a variable in the Default parameter or not.

 

So to answer your Strategy #1 question, I do have a key column, called RecordID, which I populate when a new record is created (sorry should have left that in the last snipit). 

 

I've implemented your Set code for Strategy #2 point now, thankyou. Luckily, this is a new app, so I can wipe the DB clean for a few more days & only have test data I need.

 

I'm hoping that the following structure will clairify what I'm hoping the database will look like for 2 days of data recording (in some cases data from multiple days might be entered on the same day).....

 

Item                        Qty              Date                                  RecordedEnteredDate            RecordID

Apples                    5                  7/17/2017                          7/18/2017                              1234

Oranges                 0                  7/17/2017                          7/18/2017                              1235

Pears                     4                  7/17/2017                          7/18/2017                              1236

Oranges                 3                  7/17/2017                          7/18/2017                              1237

..... Other 10 items.......

 

Apples                    3                  7/18/2017                          7/18/2017                              1248

Oranges                 4                  7/18/2017                          7/18/2017                              1249

Pears                     6                  7/18/2017                          7/18/2017                              1250

Oranges                 9                  7/18/2017                          7/18/2017                              1251

..... Other 10 items.......

 

Appologies for misuse of some terms, hopefully the above will help.

Hi @Anonymous

Yes, you can use variables for the Default property of text inputs, but you cannot set a variable as this is an action.  You could do that in the OnChange property of the same text input for example. 

In any case, the discussion is really a little bit wider, in that the solution really depends on what you are trying to do.  I get the impression that the way you organise your data is also relevant.  The solution space is so large that it is difficult to be more precise without a clearer understanding of your business needs.  For example what determines the list of items: are the 'fruits' from a predetermined set that rarely changes, or can it be something completely different every day?  Does the user have to go through the complete list every day, or pick and choose?  Depending on this and other factors you could use a dropdown instead a text input, or just produce the list in labels.

However, I am confident that you can speed up the app performance.

Anonymous
Not applicable

Hi,

 

Just wanted to say thankyou for your guidance. I did rebuild my design, with better use of lookups and filters, not to mention flows. My app is working much faster now.

 

thanks again

 

Tomcat

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,382)