I am stumped with how to filter my array with another array. I have two arrays. One for BuidlingList which has all of our locations and another which is CustodialReportList which has all the survey results for the last month for each buidling. I need to filter the BuildingList and remove any locations which also appear on the CustodialReportList so that I can then union them to create a final report with all locations, even those who did not receive a custodial report that month. I've tried a million different configurations, but come up short every time. Can someone point me to a good tutorial?
Grateful for your help.
Solved! Go to Solution.
@cmegow Because your Custodial Report List already includes the location—what is reason you need to cross-reference the two lists?..
In your case, I don't believe you need to do any filtering. I think the logic in your flow needs to be adjusted. You've indicated that you would like to create a final report that lists all locations—even if they didn't have a Custodial Report.
In this case, you should do the following. As mentioned in a previous post, you should adjust the way your flow is built. Tip: Limit the top count of items returned to a smaller number while you are building and testing your flow. It will speed up your flow runs—especially if you have a large list of items.
The Apply to each action in your flow (how you've used it isn't necessary). The Get Items action returns the list of items from your SP List in an array. In the screenshot below I've used a Compose action to output the value dynamic content from the Get Items action.
What you've done in your flow is use an Apply to each action to loop through each item returned and appended it to an array. This is unnecessary as the output is the identical to the output that the value dynamic content from the Get Items action.
Use the Select action to pull the locations only. Note: Scope action is optional—I use them in my flows to keep things organized.
This Select action will pull the locations into an array.
For your Custodial Report list, you can use the Select action to pull the values you want to return. This is optional—not required.
Now that you have an array of locations, you can use an Apply to Each action to loop through each location. I'm assuming your Building List contains one record per location.
This next Compose action is optional, however it'll help you to understand what is going on in your flow. Insert a Compose action to hold the current item. This will display the current location being looped through. It can help with troubleshooting.
I'm unsure if this is a requirement but if you would like to list the report for each school you can then use a Filter Array action to do this. To learn more about how to use the Filter Array action, please refer to this recent YT Tutorial I uploaded.
Insert the Value dynamic content from the Get Items (Custodial Report) action into the From field.
In the first value field, insert the School (or whatever the name of the dynamic content is) dynamic content, leave the operator to is equal to and insert the outputs from the Compose action above (storing the current school being looped through).
Insert a Compose action to store the number of items returned. This is optional but can help with troubleshooting.
Run a test. Verify that the Filter Array action is filtering out your items properly.
Next you will need to initialize a string variable in the root of your flow. You can add this at the top after the flow trigger or right before the Apply to each action.
Since you've indicated that you want to display buildings that may not have any custodial reports—you need a container (variable) to store report items if you have any, and another value if you do not.
Add a Condition to your flow to check the number of items returned from the Filter Array action. Insert the outputs from the Compose action storing the count of items returned from the Filter Array action into the first value field.
Change the operator to is not equal to and enter 0.
In the NO branch (this means the item count is equal to 0—no items returned from the Filter Array action), you can set the variable. I've chosen to use some static text along with dynamic content (the outputs of the Compose action storing the current item — aka the current location being looped through).
In the YES branch (meaning the item count is not equal to 0–there are items returned from the Filter Array action), add an Apply to each action.
Use this action to loop through each item returned from the Filter Array action.
Refer to this part of the YT Tutorial that talks about how to access the dynamic content from a Filter Array action. You'll need to use an expression to access the dynamic content from the Filter Array action.
Since the Apply to Each action in the Yes branch will be looping through each filtered custodial item (for the current location), you will need a way to gather the details each time it loops through.
Add an append to string variable action. This action will collect the content of the Compose action above each time it loops through.
Add a Compose action after the condition branches. If you'd like to add a heading title to the top of the list of custodial reports for the location you can. I'm not sure if you plan on sending a report via email or another way.
I've added an H2 HTML tag to wrap the current location being looped through.
Add a Set Variable action. You will want to clear out the variable each time the Apply to Each action reaches the end of the loop (before it loops through a new location). Otherwise, the append to string action will continue to append to the string which isn't what you want.
Insert the null function to empty out the variable.
Run a test. Check the outputs of the Compose action with the variable.
Alternatively, you can use a Create HTML Table action and do without the Apply to Each action if you prefer.
You will need additional actions to pull everything together in a single report.
More to come....
Hope this helps!
If I helped you solve your problem—please mark my post as a solution ✅. Consider giving me a 👍 if you liked my response! |
Hi @cmegow ,
Do you have location field in both lists? if yes then you can get all items from custodial report list and then filter the building list using location filter. If the result has some output you can delete or skip that record.
@Ramiz thanks for the tip. Yes, both arrays have a location field. I have tried every combination I can think of to make the filter. Do you have an example that I can see?
Hi @cmegow
Could you share input arrays sample and also the output array format which is expected , i have some doubts so may be by looking into this, it will be cleared.
Nived N 🚀
LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌
Hi @cmegow
I am doing something similar with dataverse connector using OData filter
Something like this might help you. Filter the buidling list based on location column from custodial report.
Here is an example of Array 1 BuildingList
"body": [
{
"School": "A. Z. Kelley Elementary",
"Custodial Company": "HES",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
},
{
"School": "Academy at Hickory Hollow",
"Custodial Company": "HES",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
},
{
"School": "Dan Mills Elementary",
"Custodial Company": "ABM",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
},
{
"School": "Lawson High",
"Custodial Company": "ABM",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
}
]
}
Here is an example from the CustodialReportList
{
"body": [
{
"School": "Dan Mills Elementary",
"Custodial Company": "ABM",
"Entrance": 3,
"Hallways": 3,
"Cafeteria": 3,
"Classrooms": 3,
"Restrooms": 2,
"Library": 3,
"Grounds": 3,
"Responsiveness": 3,
"Comments": "<div class=\"ExternalClass49FA630B787649309428A3139E7C504E\">We are in transition with new staff. We need the folowing: \n\nCleaning equipment for the custodian cleaning rooms 19-23. (broom, mop, vacume etc)\n\nWe need a heavy duty vacume for the upstairs.</div>"
}
]
}
This would be the expected outcome:
"body": [
{
"School": "A. Z. Kelley Elementary",
"Custodial Company": "HES",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
},
{
"School": "Academy at Hickory Hollow",
"Custodial Company": "HES",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
},
{
"School": "Lawson High",
"Custodial Company": "ABM",
"Entrance": null,
"Hallways": null,
"Cafeteria": null,
"Classrooms": null,
"Restrooms": null,
"Library": null,
"Grounds": null,
"Comments": null
}
]
}
@cmegow Because your Custodial Report List already includes the location—what is reason you need to cross-reference the two lists?..
In your case, I don't believe you need to do any filtering. I think the logic in your flow needs to be adjusted. You've indicated that you would like to create a final report that lists all locations—even if they didn't have a Custodial Report.
In this case, you should do the following. As mentioned in a previous post, you should adjust the way your flow is built. Tip: Limit the top count of items returned to a smaller number while you are building and testing your flow. It will speed up your flow runs—especially if you have a large list of items.
The Apply to each action in your flow (how you've used it isn't necessary). The Get Items action returns the list of items from your SP List in an array. In the screenshot below I've used a Compose action to output the value dynamic content from the Get Items action.
What you've done in your flow is use an Apply to each action to loop through each item returned and appended it to an array. This is unnecessary as the output is the identical to the output that the value dynamic content from the Get Items action.
Use the Select action to pull the locations only. Note: Scope action is optional—I use them in my flows to keep things organized.
This Select action will pull the locations into an array.
For your Custodial Report list, you can use the Select action to pull the values you want to return. This is optional—not required.
Now that you have an array of locations, you can use an Apply to Each action to loop through each location. I'm assuming your Building List contains one record per location.
This next Compose action is optional, however it'll help you to understand what is going on in your flow. Insert a Compose action to hold the current item. This will display the current location being looped through. It can help with troubleshooting.
I'm unsure if this is a requirement but if you would like to list the report for each school you can then use a Filter Array action to do this. To learn more about how to use the Filter Array action, please refer to this recent YT Tutorial I uploaded.
Insert the Value dynamic content from the Get Items (Custodial Report) action into the From field.
In the first value field, insert the School (or whatever the name of the dynamic content is) dynamic content, leave the operator to is equal to and insert the outputs from the Compose action above (storing the current school being looped through).
Insert a Compose action to store the number of items returned. This is optional but can help with troubleshooting.
Run a test. Verify that the Filter Array action is filtering out your items properly.
Next you will need to initialize a string variable in the root of your flow. You can add this at the top after the flow trigger or right before the Apply to each action.
Since you've indicated that you want to display buildings that may not have any custodial reports—you need a container (variable) to store report items if you have any, and another value if you do not.
Add a Condition to your flow to check the number of items returned from the Filter Array action. Insert the outputs from the Compose action storing the count of items returned from the Filter Array action into the first value field.
Change the operator to is not equal to and enter 0.
In the NO branch (this means the item count is equal to 0—no items returned from the Filter Array action), you can set the variable. I've chosen to use some static text along with dynamic content (the outputs of the Compose action storing the current item — aka the current location being looped through).
In the YES branch (meaning the item count is not equal to 0–there are items returned from the Filter Array action), add an Apply to each action.
Use this action to loop through each item returned from the Filter Array action.
Refer to this part of the YT Tutorial that talks about how to access the dynamic content from a Filter Array action. You'll need to use an expression to access the dynamic content from the Filter Array action.
Since the Apply to Each action in the Yes branch will be looping through each filtered custodial item (for the current location), you will need a way to gather the details each time it loops through.
Add an append to string variable action. This action will collect the content of the Compose action above each time it loops through.
Add a Compose action after the condition branches. If you'd like to add a heading title to the top of the list of custodial reports for the location you can. I'm not sure if you plan on sending a report via email or another way.
I've added an H2 HTML tag to wrap the current location being looped through.
Add a Set Variable action. You will want to clear out the variable each time the Apply to Each action reaches the end of the loop (before it loops through a new location). Otherwise, the append to string action will continue to append to the string which isn't what you want.
Insert the null function to empty out the variable.
Run a test. Check the outputs of the Compose action with the variable.
Alternatively, you can use a Create HTML Table action and do without the Apply to Each action if you prefer.
You will need additional actions to pull everything together in a single report.
More to come....
Hope this helps!
If I helped you solve your problem—please mark my post as a solution ✅. Consider giving me a 👍 if you liked my response! |
@creativeopinion thanks. The video link gave me the information I needed to rework the flow. Thank you.
Dear Community Members, We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd. During this period, members will not be able to Kudo, Comment, or Reply to any posts. On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities. What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!
We are excited to announce the Summer of Solutions Challenge! This challenge is kicking off on Monday, June 17th and will run for (4) weeks. The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions to as many questions as you can. Answers can be provided in all the communities. Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”) - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024 Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods. You must enter into each weekly Entry Period separately. How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different. Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers. At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing. Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner. A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random. Individuals will be contacted before the announcement with the opportunity to claim or deny the prize. Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners. Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event. ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE** Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber SolutionsSuper UsersNumber Solutions Deenuji 9 @NathanAlvares24 17 @Anil_g 7 @ManishSolanki 13 @eetuRobo 5 @David_MA 10 @VishnuReddy1997 5 @SpongYe 9JhonatanOB19932 (tie) @Nived_Nambiar 8 @maltie 2 (tie) @PA-Noob 2 (tie) @LukeMcG 2 (tie) @tgut03 2 (tie) Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 2: Community MembersSolutionsSuper UsersSolutionsPower Automate @Deenuji 12@ManishSolanki 19 @Anil_g 10 @NathanAlvares24 17 @VishnuReddy1997 6 @Expiscornovus 10 @Tjan 5 @Nived_Nambiar 10 @eetuRobo 3 @SudeepGhatakNZ 8 Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 3:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji32ManishSolanki55VishnuReddy199724NathanAlvares2444Anil_g22SudeepGhatakNZ40eetuRobo18Nived_Nambiar28Tjan8David_MA22 Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 4:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji11FLMike31Sayan11ManishSolanki16VishnuReddy199710creativeopinion14Akshansh-Sharma3SudeepGhatakNZ7claudiovc2CFernandes5 misc2Nived_Nambiar5 Usernametwice232rzaneti5 eetuRobo2 Anil_g2 SharonS2
On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners. The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights. Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.
We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for. We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer. Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together. Here's to new beginnings and endless possibilities! If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport. To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages