One of the challenges with data warehousing is building the right data model. There are trade-offs between normalization and denormalization, usability of dimensional models versus transactional 3NF models, data marts, and complications of slowly changing dimensions and auditability.
One technique that I think helps build data warehouse models that are intuitive, easy to populate and tune, and also extensible as new information requirements emerge is something I refer to as "macro data modeling."
Like the contrast between macroeconomics and microeconomics, macro data modeling examines an entity and its relationships from the perspective of the whole enterprise rather from the perspective of an individual business process. Think of it as modeling something from a customer's perspective rather than the perspective of someone in the finance department. Or modeling something from an enterprise perspective rather than a departmentmal perspective.
One example of this thought process might be the tracking of packages by the USPS. On the one hand, the system that is used for scanning packages at each handoff point in the shipping chain might store SCAN transactions. From a micro-perspective, this makes sense because the SCAN is what is actually being done in each location. The macro-perspective of this same operation is a model that represents PACKAGE_DELIVERY. The PACKAGE_DELIVERY record has the current status and location of a given package, key measure about how long it has spent in various statuses, key dates and times, etc; and also has a series of history records that imply every one of the SCANs that happened along the way. That macro data model will be easier to use for most analysis purposes partly because it is focussed around a concept that will exist forever (a PACKAGE_DELIVERY is still a valid concept even after delivery is complete) rather a purely transient transaction (SCAN) that only exists at a point in time.
Another way to think about that particular example is through the metaphor of a state machine. More on that in my #pragprowrimo (NaNoWriMo) endeavour.
Word Count: 7704