🤖 What is Copilot in Power Automate?
- Copilot is an AI-powered assistant that helps you generate expressions using natural language prompts.
- It simplifies complex logic by translating your intent into code-like expressions, reducing manual syntax errors and saving time.
🧑💻 How to Use Copilot for Expressions
- Open the Expression Editor:
- In any action field (e.g., a condition or formula), click
Add dynamic content
>Ask Copilot
.
- In any action field (e.g., a condition or formula), click
- Describe Your Goal in Natural Language:
- Type what you want to achieve (e.g., “Extract the first 10 characters from the email subject”).
- Review & Insert the Suggestion:
- Copilot generates the expression (e.g.,
substring(triggerBody()?['Subject'], 0, 10)
). - Edit if needed, then insert it into your flow.
- Copilot generates the expression (e.g.,
💡 Example 1: Formatting Dates
- Scenario: Convert a SharePoint list’s
DueDate
to "YYYY-MM-DD" format. - Prompt:
- “Format the DueDate field from SharePoint to YYYY-MM-DD.”
- Copilot Generates:
@formatDateTime(triggerBody()?['DueDate'], 'yyyy-MM-dd')
- Use Case:
- Standardize dates for reporting or integrations.
🔤 Example 2: String Concatenation
- Scenario: Combine a customer’s first name and last name from a form response.
- Prompt:
- “Merge FirstName and LastName with a space in between.”
- Copilot Generates:
@concat(triggerBody()?['FirstName'], ' ', triggerBody()?['LastName'])
- Use Case:
- Create display names for user profiles or emails.
🤔 Example 3: Conditional Logic
- Scenario: Send a reminder email if a task’s status is "Pending" and the due date is today.
- Prompt:
- “Check if Status is Pending and DueDate is today.”
- Copilot Generates:
@and(equals(triggerBody()?['Status'], 'Pending'), equals(formatDateTime(triggerBody()?
['DueDate'], 'yyyy-MM-dd'), formatDateTime(utcNow(), 'yyyy-MM-dd')))
- Use Case:
- Automate task reminders based on dynamic conditions.
➕ Example 4: Math Operations
- Scenario: Calculate a 15% discount on an invoice total.
- Prompt:
- “Multiply TotalAmount by 0.15 to get the discount.”
- Copilot Generates:
@mul(triggerBody()?['TotalAmount'], 0.15)
- Use Case:
- Automate financial calculations in approval workflows.
✨ Best Practices for Copilot Prompts
- Be Specific:
- Instead of “Get part of the text,” use “Extract characters 5 to 10 from the Description field.”
- Reference Dynamic Content:
- Include field names like
triggerBody()?['Email']
in your prompts.
- Include field names like
- Test Expressions:
- Use the
Compose
action to validate Copilot’s output before relying on it.
- Use the
⚠️ Limitations of Copilot
- Complex Logic: May struggle with deeply nested functions (e.g.,
xpath(xml, ‘...’)
). - Data Types: Requires clear references to fields (e.g.,
item()?[‘ID’]
). - Syntax Tweaks: Verify commas, parentheses, and quotes in generated code.
🏆 Why Use Copilot for Expressions?
- ⏱️ Speed: Generate expressions in seconds vs. manual coding.
- 👨🏫 Learning Aid: Discover new functions (e.g.,
coalesce()
,ticks()
). - ✅ Error Reduction: Avoid typos in syntax.
🔍 Try it out!
- Next time you build a flow, ask Copilot:
- “Convert the current time to Eastern Time Zone” →
- Result:
@convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'hh:mm tt')
🚀 Additional Power Automate Expression Examples
Here are additional Power Automate expression examples with practical use cases, categorized for clarity and leveraging insights from the search results:
1️⃣ Logical & Conditional Expressions
- ✅ Check multiple statuses in a spreadsheet
- Delete rows where the "Status" is "completed" or "unnecessary":
@or(equals(item()?['Status'], 'completed'), equals(item()?['Status'], 'unnecessary'))
:cite[1]
- Use case: Automate spreadsheet cleanup for project management.
- Delete rows where the "Status" is "completed" or "unnecessary":
- 📅 Validate payment deadlines
- Send reminders if payment is overdue and the due date is within 24 hours:
@and(greater(item()?['Due'], item()?['Paid']), less(item()?['DueDate'],
addDays(utcNow(), 1))) :cite[1]:cite[7]
- Use case: Automate invoice reminders for accounting workflows.
- Send reminders if payment is overdue and the due date is within 24 hours:
2️⃣ String Manipulation
- ✂️ Extract the last 4 characters of a string
@substring(outputs('Text'), sub(length(outputs('Text')), 4), 4) :cite[5]
- Use case: Mask sensitive data like credit card numbers.
- 🔄 Replace spaces with underscores in filenames
@replace(triggerBody()?['FileName'], ' ', '_') :cite[2]
- Use case: Standardize filenames before saving to SharePoint.
3️⃣ Date/Time Operations
- 🌐 Convert UTC to a specific time zone
@convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'dd-MM-yyyy hh:mm tt') :cite[3]
- Use case: Localize timestamps for global team notifications.
- ⏱️ Calculate days until a deadline
@div(sub(ticks(item()?['Deadline']), ticks(utcNow())), 864000000000) :cite[5]
- Use case: Track project timelines dynamically.
4️⃣ Data Transformation & Validation
- 🗂️ Sort an array of objects by property
@sort(outputs('EmployeeList'), 'Name') :cite[4]
- Use case: Organize CRM contact lists alphabetically.
- ✅ Validate numeric input
@if(isInt(triggerBody()?['Age']), 'Valid', 'Invalid') :cite[4]
- Use case: Ensure age fields in forms are integers.
5️⃣ Error Handling & Defaults
- 📦 Handle empty or null values
@coalesce(triggerBody()?['Department'], 'Unassigned') :cite[5]
- Use case: Avoid null errors in HR onboarding flows.
- 🔗 Log flow run URLs for debugging
@concat('https://flow.microsoft.com/manage/environments/', workflow()?['tags']
- Use case: Simplify troubleshooting by embedding run links in error emails.
['environmentName'],
'/flows/', workflow()?['name'], '/runs/', workflow()?['run']['name']) :cite[5]
6️⃣ Advanced Functions
- ✂️ Split a string into chunks
@chunk('PowerAutomateRocks', 5) → \["Power", "Autom", "ateRo", "cks"\] :cite[4]
- Use case: Process long text for SMS or API compatibility.
- 📍 Find the second occurrence of a character
@nthIndexOf('123456789123456789', '1', 2) → 9 :cite[4]
- Use case: Parse structured IDs or codes.
7️⃣ Creative Use Cases
- 🧑🤝🧑 Generate random team assignments
@take(shuffle(variables('Employees')), 3) :cite[4]
- Use case: Randomize task allocations in team workflows.
- 📞 Format phone numbers using "Format by Example"
- Input: 1234567890 → Output: (123) 456-7890
- No code needed! Use the Format data by example feature to auto-generate expressions ⁷.
✨ Best Practices
- 🧪 Test expressions using the Compose action to validate outputs before deployment ³⁴.
- 💡 Simplify nested logic with the modern expression editor, which integrates dynamic content and functions in one interface ⁵⁷.
- ❓ Use
?
for optional JSON properties to avoid null errors (e.g.,triggerBody()?['Department']
) ³.