<p>I'm architecting a new app at the moment, with a high read:write ratio. At my current employer we have lots of denormalised data on our tables for performance reasons. Is it better practice to have totally 3NF tables and then use indexed views to do all the denormalisation? Should I run queries against the tables or views?</p>

<p>An example of some of the things I am interested are aggregates of columns child tables (e.g. having user post count stored somewhere).</p>

From your description, if you're looking for a pattern that matches better than Factory, try Strategy:
Strategy Pattern
Your
context
could be a custom class which encapsulates and abstracts the different report inputs (you could use the AbstractFactory pattern for this part)
Your
strategy
could implement any number of different query filters or additional logic needed.  And if you ever need to change the system in the future, you can switch between report tools by simply creating a new strategy.
Hope that helps!