This is an idea I had when I realised that almost everything supports querying on the modern search infrastructure. Since users can create queries on data and save those queries, it makes sense to me to be able to create reports based on that data (rather than having a completely separate filtering system for reporting).
In this case I think Fact should just be responsible for taking a set of data and allowing the user to pick from the available fields to determine what type of graph they want and how the data should drive that graph. Fact then doesn't need to deal with actually retrieving the data at all; it is just provided a list of objects from a query (where the query can be on any object type).
What are your thoughts on this @epriestley?