DMN defines “aggregation” in the following way:
“Multiple hits must be aggregated into a single result. DMN 1.0 specifies six aggregation indicators, namely: collect, sum, min, max, average. Optionally, the aggregation indicator may be included in the table. The default is collect.”
Below is a list of my issues with this DMN 1.0 approach.
First of all, contrary to a hit policy the aggregation is not a property of a decision table but rather a property of a conclusion column (“result”) inside a multi-hit decision table. We do not need to artificially limit aggregation to a single result only for sake of a strange place of an aggregation operator at the of the table like in this DMN example
Instead we should place the proper indicators inside the conclusion columns for which decision variable we want to aggregates multiple hits:
If all indicators are the same (like in this example), they may be merged. This way we may have multiple aggregations not only for several results but even for one result. It is really important because under certain conditions along with the indicator “sum” (+=) the score aggregation may require other indicators such as: subtract (-=), multiply (*=) or divide (/=).
Thus, I propose to change to an indicator placement and to add these additional indicators. This way an aggregation indicator becomes just another conclusion operator and probably should be called so as well! And of course DMN should not state that “multiple hits must be aggregated into a single result”. We may use non-aggregation operators such as “=” as well for the same result.
I also believe there should be no default aggregation. Look at this DMN example:
It is absolutely unclear that because of the “invisible” collect indicator 20% scholarship and 30% loan have been accumulated in the Student Eligibility List. Instead it can be clearly defined as follows:
Here we used the operator “Add” as a synonym for the collect.
And finally, I believe DMN 1.1 should define a way to introduce custom aggregation operators specific for a particular aggregation variable – something similar to what we do in OpenRules.