Afternoon all,
I'm looking to display two columns ("Month", "FAQ Item Name") from a SharePoint list that contains information about when certain reports are updated for an information app i'm creating.
I need to see a distinct list of "FAQ Item Name" (Which has multiple iterations of items each with different dates) where it shows the item with the soonest occurring month. This is so I can create a table that shows, for example, the next three reports that will be updated. I pull this into a "calPre" collection.
There is a slight problem in that "FAQ Item Name" is a lookup column, so it comes into a collection as a record that a table can't parse the text from, as well as having a number of blank records in that column that i need to filter out.
My solution to this is to pull that first collection (calPre) into a second collection (calPre2) that removes my blank rows and just gives me the two columns i'm interested it:
Clear(calPre2);
ForAll(
Filter(
calPre,
Not(IsBlank(FAQ_x0020_Item_x0020_Name))
),
Collect(
calPre2,
{
FAQItem: Text('FAQ Item Name'.Value),
dateMonth: Month
}
)
);
So now I have my two columns. You can see an instance above of the information that I might want to sort out: I would need to have a distinct list of the FAQItem column where the items that are returned are the ones with the soonest occurring date. My thinking is that I would create a new collection every time the app opens that would recalculate this, and I could sort it by the dateMonth column, then show the TopN number of results to get my 3 reports that will be updated soon.
I've tried GroupBy, AddColumns, filtering by date, all the variations of Text() or Distinct().value/result and I either don't get anything returned, the dates are wrong, or it brings back lines and lines of [Object object] errors.
I'm having real difficulty with something that I thought would be quite simple. Any help would be greatly appreciated!
Solved! Go to Solution.
I would not suggest a table control for this as you will not have flexibility to control what is shown in the FAQs column.
If you are going to do it in a Table, then you will need to shape your data for that table. Set this as the Items property of the Table:
AddColumns(
Filter(
GroupBy(
SortByColumns(
AddColumns(yourDataSource,
"_FAQname", 'FAQ Item Name'.Value
),
Month, Descending
),
"_FAQname",
"FAQs"
),
!IsBlank(_FAQname)
),
"MostRecent", First(FAQs).Month
)
Then show the _FAQname and the MostRecent column in your table. Otherwise you will be trying to display objects...which will show as you have in the picture.
In general, the formula you want is the following:
Filter(
GroupBy(
SortByColumns(
AddColumns(yourDataSource,
"_FAQname", 'FAQ Item Name'.Value
),
Month, Descending
),
"_FAQname",
"FAQs"
),
!IsBlank(_FAQname)
)
This will provide you a table with distinct FAQ names (not blank) with a column called _FAQname that will have the FAQ name from the Lookup and a column called FAQs with a table of all the associated FAQs where the first record will be the most recent.
I hope this is helpful for you.
Hi @RandyHayes
So close! I plugged this into a ClearCollect called calendarCol and got out my distinct list, but returned a column with [object Object] in it?
It could be that I misunderstand and the idea is to never show that column that would have [object Object] in it, but it would be helpful if I could view the date as well (which i assume is lurking inside that FAQs column above?)
Thank you by the way. I really appreciate the help.
I would not suggest a table control for this as you will not have flexibility to control what is shown in the FAQs column.
If you are going to do it in a Table, then you will need to shape your data for that table. Set this as the Items property of the Table:
AddColumns(
Filter(
GroupBy(
SortByColumns(
AddColumns(yourDataSource,
"_FAQname", 'FAQ Item Name'.Value
),
Month, Descending
),
"_FAQname",
"FAQs"
),
!IsBlank(_FAQname)
),
"MostRecent", First(FAQs).Month
)
Then show the _FAQname and the MostRecent column in your table. Otherwise you will be trying to display objects...which will show as you have in the picture.
I could kiss you right now! Thank you so much. I've dropped what you put into the ClearCollect statement again so I can use it on multiple screen, and also been able to apply a date so it won't show anything earlier than today or after an abitrary date in the future in case that's every a request. For the life of me I can't seem to get my head around the combination of addcolumns, showcolumns and groupby. It baffles me!
Thankyou again!
Personally I would skip the collection as you don't need one for this. If you only need a static snapshot of the table, then you can just assign it to a variable. If you need your table to be dynamic based on any changes in your app, then a dynamic variable will do. A collection is overhead you probably don't need.
Add-, Show-, Rename-, Drop-columns are all data shaping tools. In addition to that, GroupBy, ForAll and Ungroup allow you to shape your data in distinct ways. ALL of the mentioned functions return tables that have been shaped by the function you use. These tools are highly important to learn and use as they will rapidly increase your productivity and simplify your design. For example, what you were originally trying to do by making one collection, then making another with changes to the first and so on, can all be achieved in one step.
Basic concepts:
AddColumns - your data does not have a column you want (static value, calculation, looked up value, another record, another tables, etc), or it has a column you can't use well (i.e. lookup, choice, etc.) and you really just want something simple.
ShowColumns - your data has more columns than you want to use. This is helpful in a scenario where you have lots of columns but only want to use a couple or one. This is not highly needed, but it is helpful if you are passing a table of records to something that expects only certain columns.
RenameColumns - as its name implies, this renames a column. Helpful function this one! Good example is in the scenario where you have a combobox and need to set a default. Your items of the combobox might be something like Distinct (which returns a table with a single column called Result), and you want to match a Title to it. A record of Title will never match a Record of Result, so you can easily use this function to rename the Title to Result or the other way around.
DropColumns - this is the opposite of the ShowColumns function and will remove particular columns from the table. This is helpful in scenarios where you have added columns to your table, but other aspects of your app may not like that added column to be in the schema, you can DropColumns on the added column or other.
GroupBy - in it's simple form, takes a table and returns a table that is grouped by the column(s) you specify. If you provide, for example, a "Title" and a "Recs" for grouping, then the resulting table will have two column, the Title column and another column called Recs that will have all of the records from the original table that match the Distinct values in the Title column. This is equivalent to doing a Distinct on all table records and then trying to look up each record that has that distinct value. GroupBy will do it all in one shot.
Ungroup - does the inverse of the GroupBy. It will take a table and ungroup by a column that you provide.
ForAll - by far the BEST data shaping tool in PowerApps. Most use it incorrectly as a For/Loop...it is not. It is a function that will iterate through ANY table you give it and will allow you to provide any record you want as a result in any schema format or...well, pretty much anything. The sky is the limit with this one and it is very powerful for data shaping.
There are some others, but the above are the powerhouse workers.
Absolutely fantastic. Thank you for the simple break down. I've managed to get through all my powerapps thus far minimally using the above functions, either by making sure I shape my data source in the best way, or by somehow cobbling code together from what I see online and managing to make it work. Often times I think the difficulty for me is understanding the flow of the syntax (i.e. what bit relates to what) in the code.
Thank you again!
Yes, that can be confusing at first. The thing is to look from the inside out.
DropColumns(
SortByColumns(
AddColumns(
GroupBy(
Filter(
someRecords,
someCriteria
),
"someColumn", "_recs"
),
"_someAdded", SomeValue
),
"_someAdded"
),
"_someAdded"
)
In the above, the first level is the someRecords in the middle. When looking at the formula you can glean one important point about it...it is a table. Because filter requires a table.
So from there, the Table is filtered by some criteria.
Filter returns a Table that is the input/datasource (first argument) to the GroupBy.
GroupBy returns a Table with (in this case) two columns - the distinct values of "someColumn" and all the records that match that particular distinct value.
The table returned from GroupBy then becomes the input/datasource (first argument) to the AddColumns function.
AddColumns will add a column called _someAdded to the record schema of the supplied table (remember - it has two columns that were returned from the GroupBy) and return that table.
The resulting table from AddColumns then becomes the input/datasource (first argument) to the SortByColumns function, which will return a table of all the records in the supplied table sorted, in this case, by the "_someAdded" column.
Finally, the table returned from the SortByColumns is supplied as the input/datasource (first argument) to the DropColumns function. That function will return a table with the "_SomeAdded" column removed.
So, the end result of your formula is a table of data that has been "shaped" how you would want it for the Items property of a control or pretty much for anything you need a table for.
Ah, that puts in a format that makes alot more sense. I've done some coding in the past, and spent quite alot of time in PowerApps, but it's suprising to me that I've gotten through both the syntax in this, and in things like PowerBI, without an explicit understanding of "Inside Out". I can't really explain how I've managed to get as far as I have. Thank you again @RandyHayes, your insight is invaluable.
No problem at all. By the way, you will get much further if you forget about what you learned doing the coding in the past. PowerApps is a no-code platform. If you've done formulas in Excel, then you are better off referencing that knowledge over any coding knowledge as PowerApps was designed around the concept of formulas like Excel.
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 in the Forums 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 of SolutionsSuper UsersNumber of Solutions @anandm08 23 @WarrenBelz 31 @DBO_DV 10 @Amik 19 AmínAA 6 @mmbr1606 12 @rzuber 4 @happyume 7 @Giraldoj 3@ANB 6 (tie) @SpongYe 6 (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. Community MembersSolutionsSuper UsersSolutions @anandm08 10@WarrenBelz 25 @DBO_DV 6@mmbr1606 14 @AmínAA 4 @Amik 12 @royg 3 @ANB 10 @AllanDeCastro 2 @SunilPashikanti 5 @Michaelfp 2 @FLMike 5 @eduardo_izzo 2 Meekou 2 @rzuber 2 @Velegandla 2 @PowerPlatform-P 2 @Micaiah 2 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 Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27 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 Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8 SunilPashikanti8
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