I'm trying to find how to refer to a field of a parent layer as a filter for an aggregate function. The instructions specify that the parent layer can be referred to with the variable @parent, but I've tried all manner of combinations and can't seem to get any to work.
The formula is;
aggregate(layer:='{my child layer}',
aggregate:='sum',
expression:="{a field from the child layer}",
filter:="{a field from the parent layer}" > 1000
)
Obviously, the field from the parent layer also appears in the child layer (otherwise the filter wouldn't work), but I want to build an expression which will iterate over several rows in the parent layer, each of which is a particular field in the child layer.
So far, I've tried replacing "{a field from the parent layer}"
with;
@parent "{field}"
"{field}"@parent
"{field}@parent"
"{field}(@parent)"
...and probably a half-dozen other combinations of parentheses, quotes and orders.
The example simply uses geometry(@parent)
, is it not possible with anything other than geometry?
Just in case the above doesn't make sense, or anyone can think of an alternative method, what I'm trying to do (in a simple example), would be if say one layer countries
had the fields "area", "urban population", "rural population", and "adult population"
. In each row is a different country.
In another layer summary
, there are the fields "field", and "total areas"
. Each row is a field from the countries
layer.
I want the total areas
column to add up the the total areas from countries
where those countries relevant populations are over 1000. So total areas
for the row urban population
would show the total are of all countries where the urban population was over 1000, but total areas
in the row rural population
would show the total area of all countries where the rural population was over 1000.
In the more complex real world problem I'm working on, there are 36 rows in the summary
table (36 fields to summarise from the child layer), and 9 measurements (in addition to area) to summarise. So writing a single query for each summary (360 of them) is just not an option.
aggregate()
, if you call the first partlayer:={my parent layer}
instead ofchild
, it will become more apparent and easily understood. You can access to any parent field just by" field "
without@parent
.