If I've queried up some data, is there an easy way to filter that into smaller subsets without making new queries? For example if wanted a grid of 'all users', then I wanted second grid of all people with the first name 'John' and then a third grid of all the people with the last name 'Smith', is there a way to filter the data for the other 2 grids using the first grid's data? Or am I stuck making 3 different queries to the database? Would it be possible somehow to create local variables containing all three using a single query?
Discussion posts and replies are publicly visible
That would be possible. Have a look at a!localVariables and the filter() function.
But in general, it is a bad idea to load larger volumes of data into Appian and then try to filter it in memory. The database is made for this and will not complain.
Use the index function: index() Function - Appian 21.4.
Common pattern would be combining this in the format index(data, wherecontains(), null) in order to only find the data in your set that meets there wherecontains() condition. You can create the subsequent indexes as local variables following the first local variable with the parent/top-level grid data.
Agreed with Stefan. You should generally avoid getting the same data twice but different data from the same source is a separate matter. It depends on the exact use case but multiple calls to the database may be more performant than getting all data and transforming it in Appian.
The requirement of an outside function/rule for the filter function makes it kind of a hassle to use. But the data here isn't going to be overly huge. Maybe a 1-2 dozen entries. I mostly wanted to be able to grab a row or two of different particular IDs in different places on an interface. It felt like querying for each one separately would be not the best.
This works, thanks!