Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Python | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Python | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA | Python |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA | Python
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Databricks | Power Apps | Power Automate |
Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables | Power Apps | Power Automate
Power BI | Power Apps | Power Automate | SQL | VBA | Python | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables
Power BI | Power Apps | Power Automate | SQL | VBA | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
LEARN THIS HANDS ON
Power Apps & Power Automate
Power Automate + SharePoint is usually the first combo people try for approvals, but the default templates fall apart once you add real-world rules: rejections, delegations, escalations, and auditability. This guide walks through a complete pattern for end-to-end approval workflows with Power Automate and SharePoint, focusing on how to handle those edge cases cleanly.
If you want to turn this into a broader automation capability across your team, it’s worth investing in a structured path like a dedicated Power Automate skills program, but let’s get hands-on right now.
We’ll use a simple but realistic scenario:
Design constraints:
We’ll build this as a single main flow plus a small helper pattern for escalations.
Power Automate is only as robust as your data model. Before touching flows, fix the SharePoint list.
Recommended columns (beyond your business fields):
Manager, Finance, Director.Approved by Manager, Rejected by Finance, etc.This structure gives you enough metadata to:
Create a cloud flow with:
Immediately after the trigger, add a Condition to protect against infinite loops:
Approval Status is equal to Pending AND Current Approver is empty
This ensures the flow only fires for fresh items or items that have been reset.
Add a Compose or Initialize variable for due date:
addDays(utcNow(), 2)
Then update the SharePoint item:
PendingApprover columnaddDays(...)Manager (or your first stage)Add action: Start and wait for an approval
Approve/Reject – First to respondManager approval for @{triggerOutputs()?['body/Title']}Approver (email from the SharePoint column)Use the Link to item from the trigger in the email body so approvers can open the request directly.
After the approval action, add a Condition:
Outcome (from the approval action)is equal toApproveIn the If yes branch (approved):
Update the SharePoint item:
ApprovedApproved by @{outputs('Start_and_wait_for_an_approval')?['body/responder/email']}@{outputs('Start_and_wait_for_an_approval')?['body/comments']}null (clear it)If you have another stage (e.g. Finance), this is where you:
Approval Stage = FinanceCurrent Approver = Finance approverIn the If no branch (rejected):
Update SharePoint item:
RejectedRejected by @{...}nullOptionally send an email to the requester with:
At this point, basic approvals and rejections are covered. Now we extend for delegation and escalation.
Delegation usually means: “I’m not the right person; assign this to someone else.” If you don’t design for it, users will forward emails and reply in Outlook, and your workflow will never know.
Two practical options:
Delegation via SharePoint fields
Current Approver = new personApproval Status = DelegatedDelegation via Power Apps / custom form
Current Approver and flags a Delegation Requested field.We’ll use the first option (simpler, no extra tools).
Extend your main flow:
Add a Condition near the start:
Approval Status is DelegatedIn this branch:
Approval Status back to PendingCurrent Approver as set by the user (delegated person)Current Approver.For audit trail, append to Approval History:
CONCATENATE(
formatDateTime(utcNow(), 'yyyy-MM-dd HH:mm'),
' | Delegated to ',
string(outputs('Current_Approver_DisplayName'))
)
(This is pseudocode; in practice you’ll build this using a Compose and then write to the field.)
Key rule: never reuse the original approval after delegation. Always start a fresh approval action for the new person.
Escalations are about time: if no decision by a deadline, move it up.
We’ll implement this with a separate scheduled flow to avoid complex delay branches in the main flow.
Create a new scheduled cloud flow:
Add Get items (SharePoint):
ApprovalStatus eq 'Pending' and DueDate lt '@{utcNow()}'
(Adjust field names to your internal names, e.g. ApprovalStatus might be Approval_x0020_Status.)
For each item (use Apply to each):
Decide who to escalate to. Options:
If Backup Approver is not empty:
Current Approver = Backup Approver.Approval Status = Escalated.If no Backup Approver is set:
After setting the new approver, call the same Start and wait for an approval pattern:
Escalated approval for @{Title}Current ApproverUpdate the Due Date again using:
addDays(utcNow(), 2)
This gives the escalated approver their own SLA window.
Because we’re using a separate flow, we must ensure we don’t start multiple approvals for the same item.
Tactics:
Approval Token field (GUID) and only escalate if it’s empty.Current Approver and Due Date as soon as a decision is made.A simple, robust rule:
Current Approver is not empty and Approval Status is Pending.Approvals without reporting are painful to manage. With the fields we defined earlier, you can build simple Power BI reports on top of the SharePoint list.
Key columns to track:
Approval StatusApproval StageCurrent ApproverModified (built-in, for last change)Created (built-in)You can easily derive:
If you use Power BI, a simple measure for approval time might look like:
Approval Duration (hours) =
VAR CreatedDate = MIN('Approvals'[Created])
VAR ApprovedDate = MIN('Approvals'[ApprovedDate])
RETURN
IF(
NOT ISBLANK(ApprovedDate),
DATEDIFF(CreatedDate, ApprovedDate, HOUR)
)
You’d populate ApprovedDate via Power Automate when an item is approved.
For a more narrative audit trail, you can append logs into Approval History.
Example text pattern:
2024-09-15 10:23 | Manager (john.doe@contoso.com) approved | Comment: OK to proceed
2024-09-16 09:05 | Escalated to jane.smith@contoso.com (no response in 2 days)
You build this with:
Approval History.Problem:
Mitigation:
Approval Status is Pending and Current Approver is empty.Flow State field and only act when it’s Ready.Problem:
Mitigation:
Current Approver.Approval Stage back to initial when user edits and resubmits.Resubmit flag the user can set to restart the flow.Problem:
Mitigation:
Current Approver field.Current Approver instead of forwarding.Current Approver in Approval History.Don’t start with templates. Design your SharePoint list first, with explicit fields for Current Approver, Approval Status, Due Date, and Approval Stage, then build your Power Automate flows around those fields. Once you’ve modeled rejections, delegations, and escalations in the data, the flow logic becomes straightforward—and far easier to maintain when your process changes.
Power Automate
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering