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

Announcements

News and Announcements icon
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
    521 Super User 2026 Season 1 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

Season of Sharing Community Challenge Launch!

Jump in, show your community spirit, and win prizes!

Kudos to our 2025 Community Spotlight Honorees

Expanding mentorship, skilling, and AI innovation

Congratulations to the May Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > Power Automate

#1
Valantis Profile Picture

Valantis 377

#2
11manish Profile Picture

11manish 279

#3
David_MA Profile Picture

David_MA 234 Super User 2026 Season 1

Last 30 days Overall leaderboard