<html>
<!--AD_DND-->
<head>
<title>Data Warehouse Subsystem</title>
</head>

<body bgcolor=#ffffff text=#000000>
<h2>Data Warehouse Subsystem</h2>

part of the <a href="index.html">ArsDigita Community System</a>
by <a href="http://photo.net/philg/">Philip Greenspun</a>

<hr>

Most of the real work in building a data warehouse is constructing a
dimensional data model and copying information from your online
transaction processing (OLTP) data model into the dimensional model.
This software won't help you with that.  Although I hope to some day
write about this, for now I will simply refer you to Ralph Kimball's <a
href="http://www.amazon.com/exec/obidos/ISBN=0471153370/photonetA/"><cite>The
Data Warehouse Toolkit</cite></a>.

<p>

What this subsystem is designed to do is provide a reasonable user
interface to ad hoc querying of a single table.  If you have multiple
tables that need to be JOINed, you could either extend this software a
bit or build a view that does the JOIN.  If you have a truly large
database (gigabytes), you might find that performance isn't acceptable.
In that case, what you need to do is 

<ul>
<li>get your data into a dimensional model
<li>build a view that joins the fact table to the dimensions and
contains everything a user might want to group by, restrict by, or
aggregate
<li>see if you can't browbeat your RDBMS into optimizing queries into
this view so that it doesn't mess with tables that are irrelevant to a
particular query
</ul>

Once you've gotten your data into a dimensional model (one fact table
plus a bunch of dimension tables), the data warehousing module of the
ACS can help you.  It is also potentially useful if you just want to
provide ad-hoc query capabilities for a big table that happens to exist
in your production database.

<p>

The assumption is that this module will keep you from having to buy,
install, and maintain Seagate Crystal Reports (a truly painful-to-use
product).

<h3>Installation</h3>

You will almost surely want to go into /tcl/dw-defs.tcl and change
<code>dw_table_name</code> to return either the right table or view for
this system or something that depends on which user is logged in.

<hr>
<a href="http://photo.net/philg/"><address>philg@mit.edu</address></a>
</body>
</html>