Recently, we encountered a requirement in one of our projects to integrate a SQL database with Power 

Automate in order to retrieve records and send automated email notifications to respective managers. 

The objective was to calculate the total number of hours logged by resources reporting to each 

manager and share a consolidated summary via email. 

In the email, we needed to group the records by manager and show the total hours for each group. 

However, there were more than 1,000 records, and looping through each item to calculate the total 

was taking too much time. 

Currently, our database contains more than 9,000 records. In our Power Automate flow, we used 

multiple actions to transform the data, which caused the execution time to exceed 34 minutes. This 

was taking too long and needed optimization. 

To transform the data and calculate the totals, we used multiple For Each loop in the flow. However, 

using these loops significantly increased the execution time. Therefore, we wanted to optimize the 

solution by performing aggregation (such as summation) without using loops, in order to reduce the 

overall execution time. 

Now, let’s take a deeper look at the solution we used to calculate the total hours grouped by manager 

without using a loop. 

First, we used the Select action to extract and store the Manager IDs from the records. Then, we 

added a Compose action and used an expression to get the unique Manager IDs. 

After retrieving the unique Manager IDs, we used an Apply to each action to iterate through those 

unique IDs. Inside the loop, we added a Filter action to filter the records associated with each specific 

manager. 

Once we had the filtered records for a manager, the next step was to calculate the total of the Hours 

column for all resources under that manager. 

Instead of using another loop, we followed a different approach. 

Step 1: Store the filtered data in a JSON object 

We used a Compose action to store the filtered records in a JSON structure like this: 

{ 

  “data”: { 

    “rows”: @{body(‘Filter_Resources’)} 

  } 

} 

Step 2: Convert the JSON object to XML 

Next, we converted this JSON object into XML format using the xml() function: 

xml(outputs(‘Convert_In_Object’))  

Step 3: Use XPath to calculate the total 

Now comes the most important part using XPath. 

XPath allows us to query the XML data and extract values without using a loop. With XPath, we can 

directly apply the sum() function to calculate the total of a specific column. 

Here is the expression we used: 

xpath( 

outputs(‘Convert_In_XML’), 

‘sum(//data//Hours)’ 

) 

This expression calculates the total of the Hours column for all filtered records without using an 

additional Apply to each loop. 

Conclusion: By using the XPath function, we can apply multiple operations directly on 

XML data. In this solution, we used XPath to calculate the total hours without using a loop. 

This approach helped us avoid multiple Apply to each action, reduce execution time, and 

improve the overall performance of the flow. javascript:”javascript:”javascript:”

writer.editor.GO_TO_TOP

writer.editor.GO_TO_BOTTOM

Thank you, Nisha Pawar for your valuable inputs to this blog

Leave a comment