July 1st is always a day that I both look forward to and dread. That’s the morning I find out whether my MVP status has been renewed or not. I really started worrying this year when I saw lots of my friends and colleagues announce their re-awards at a little after 11:00 AM Eastern time. By noon I was convinced that I had not been re-awarded. The one piece of hope that I tried to hold onto was that MS said they would send emails to all MVPs with the re-award decision whether they were re-awarded or not. With a sigh of relief I finally got my email around 12:30 Eastern time. I’m not sure why my email was later than it has been in previous years, but it was a reminder to me how much I value being an MVP. I am particularly honored and grateful for Microsoft’s continued recognition this year.
But now its time to plan for the new year. The Covid-19 pandemic has really cut into my time speaking at conferences, since most conferences have been cancelled or postponed. But I have spoken at a couple virtual conferences this spring and as fall approaches it looks like I will have a busy schedule speaking at conferences that were postponed from earlier this year.
Over the last year I’ve been spending a lot more time working with Power Apps and Power Automate, particularly as it applies to SharePoint and Teams. In addition to being re-awarded as an MVP I’ve also been named a Dual Super User in the Power Apps and Power Automate community forums. With the announcement last week that SharePoint workflows are going away these two areas will become even more important for working with SharePoint online.
So here’s to another year as an MVP. I’m really looking forward to it.
One of the spots where I see a lot of people being challenged when they first learn PowerApps is the concept of delegation. Delegation comes into play when working with data sources larger than 500 records. By default PowerApps is designed to only work on a maximum of 500 records at a time. You can increase this default setting to a maximum of 2,000, but that usually results in a noticeable performance lag in your PowerApp. To avoid that problem you should always limit the number of records you are retrieving from a data source to 500 records or less. One of the most common ways to do that is by using the Filter() function to limit the records being returned by the data source to a specific subset that you want to work on.
Using Filter() to limit the number of records retrieved from a specific data source is a great strategy, but it doesn’t always work. This is where understanding the concept of delegation becomes critical. Delegation is the process of having the data source filter the records before they are returned to the PowerApp instead of having the PowerApp apply the filter directly. This is complicated by the fact that not all data sources support delegation and different data sources support different logical operators for delegation. You can find a list of delegable data sources and operators here: https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/delegation-list. But even this documentation can lead to confusion.
The confusion comes in from some footnotes in the ‘Filter and LookUp delegable predicates’ section of the documentation. Footnote 3 on the logical operators reads, “For numeric columns, all operators can be delegated. For ID columns, only the ‘=’ can be delegated. Date columns can’t be delegated.” This would imply that all the operators should work with a Boolean value of true or false. But in my experience Boolean columns are treated the same way that ID columns are treated. The only operator that works is ‘=’. If you try to use a Filter statement where a Boolean value is not equal to something you will see that it issues a delegation warning. The following screenshot shows an example.
But if I change the formula to the Boolean being equal to true then the delegation warning goes away and the function becomes delegable. See the screenshot below.
The moral of the story is that understanding the intricacies of delegation is critical when building PowerApps.