web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Automate / Trouble filtering on S...
Power Automate
Suggested Answer

Trouble filtering on SharePoint multi‑select Choice column (“Location contains Acme”) in Flow

(0) ShareShare
ReportReport
Posted on by 29
Trigger: SharePoint — When an item or a file is modified
Columns:
Status (Choice, single select)
Location (Choice, multi‑select) — internal name confirmed

Scenario
I’m recreating legacy SharePoint alerts for a user, where Rules are not specific enough. The alert should fire when:
The item is modified,
Status = Active, and
Location contains “Acme” (multi‑select Choice).
 
I can successfully filter Status = Active using a trigger condition. The problem is adding the Location contains “Acme” check.
 
Everything I’ve tried against the multi‑select Location column fails—both as a trigger condition and as a Condition action inside the flow. I have verified the internal names for both columns.
 
For now, I am only trying to get the Location trigger condition working. I removed all Status logic until I can get Location filtering to work on its own.
  • The internal name of the Location column is confirmed as Location.
  • The trigger fires normally when I remove all conditions, so the List, Site, and Trigger are correct.
What I've tried with Copilot help
 
  1. Expressions assuming Location is an array of objects with .Value
    • @contains(triggerOutputs()?['body/Location/Value'], 'Acme')
  2. Expressions assuming Location is an array of strings
    • @contains(triggerOutputs()?['body/Location'], 'Acme')
  3. Null‑safe expressions using coalesce(...)
    • @contains(coalesce(triggerOutputs()?['body/Location'], json('[]')), 'Acme')
  4. join‑based and set‑logic patterns
    • @contains(join(coalesce(triggerOutputs()?['body/Location'], json('[]')), ','), 'Acme')
    • @greater(length(intersection(coalesce(triggerOutputs()?['body/Location'], json('[]')), array('Acme'))), 0)
Sample Errors I've received:
  • The template language function 'join' expects its first parameter to be an array. The provided value is of type 'Null'.
  • The template language function 'contains' expects an array or string. The provided value is of type 'Null'.
  • TemplateValidationError: The flow's trigger condition is not a valid template language expression.

 
Categories:
I have the same question (0)
  • Suggested answer
    MParikh Profile Picture
    371 Super User 2025 Season 2 on at
    Hi @MWISE,
     
    SharePoint multi-select choice columns return an array of objects in Power Automate, not a simple string or array of strings. Your trigger condition needs to extract the values from these objects before checking if the array contains "Acme".
    Working trigger condition
    Use this expression in your trigger condition settings:
    @contains(xpath(xml(json(concat('{"body":{"value":', triggerOutputs()?['body/Location'], '}}'))), '/body/value/Value/text()'), 'Acme')
    

    Replace Location with the internal name of your column if different. This expression extracts the selected values into a clean array and checks if it contains "Acme".

    Why your expressions failed

    Array of objects structure
    Multi-select columns output as [{"@odata.type":"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference","Id":1,"Value":"Acme"}]. Direct @contains() on this structure fails because you're checking objects, not strings.
    ​​
    Join and coalesce limitations
    The join() function works on string arrays, but your Location column returns object arrays. You must extract the Value property first using xpath() or iterate with json() parsing.

    Null handling
    When Location is empty, triggerOutputs()?['body/Location'] returns null, causing "The template language function 'contains' expects its first parameter to be an array" errors. The xpath expression handles this gracefully.
    ​​
    Alternative using Select action
    If trigger conditions prove too complex, add a Condition action after your trigger:
    1. Add a Select action with From set to triggerOutputs()?['body/Location']
    2. Map the output to item()?['Value']
    3. Power Automate wraps this in Apply to each, drag Select out and delete the loop
    4. Use contains(outputs('Select'), 'Acme') in your Condition
    This approach bypasses trigger condition complexity and gives you better debugging visibility.

    Thank you!
    Proud to be a Super User!
    📩 Need more help?
    ✔️ Don’t forget to Accept as Solution if this guidance worked for you.
    💛 Your Like motivates me to keep helping

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Forum hierarchy changes are complete!

In our never-ending quest to improve we are simplifying the forum hierarchy…

Kudos to our 2025 Community Spotlight Honorees

Congratulations to our 2025 community superstars!

Leaderboard > Power Automate

#1
trice602 Profile Picture

trice602 375 Super User 2025 Season 2

#2
David_MA Profile Picture

David_MA 269 Super User 2025 Season 2

#3
Expiscornovus Profile Picture

Expiscornovus 127 Most Valuable Professional

Last 30 days Overall leaderboard