What we have done at Federal University of Santa Catarina (UFSC) in Brazil for the UNA-SUS project is invest a lot of energy building a Object Oriented architecture to help achieve the needs of filtering and high level reporting.
We divided the process in "filter selected" <> "data sources" <> "data objects" <> "the reporting logic" <> "view decorators"
With that architecture the Business logic that correspond of simple queries to the "data objects" asking things like "does this activity have grades?" if so, has it been graded on the expected date?
And after this Business Logic execution, we generate rich reports that include not only the numeric data but also give more information like painting the cell red if it the grade was graded several days after the expected date and so on.