<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Kellogg Associates: ActiveWarehouse</title>
    <link>http://kellogg-assoc.com/articles/2007/05/19/activewarehouse</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>ActiveWarehouse</title>
      <description>&lt;p&gt;Related to the interesting talk at a recent NBRug meeting on Ruport, I&amp;#8217;ve been looking at doing data warehousing in Ruby. Fortunately, &lt;a href="http://anthonyeden.com/"&gt;Anthony Eden&lt;/a&gt; has beaten me to the punch with &lt;a href="http://activewarehouse.rubyforge.org/"&gt;ActiveWarehouse&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;For those unfamiliar with Data Warehousing, the concepts are basically to create a series of &lt;em&gt;facts&lt;/em&gt; that are indexed buy multiple &lt;em&gt;dimensions&lt;/em&gt;. A &lt;em&gt;fact&lt;/em&gt; is typically an integer (eg, sales amount) with data relating to the fact expressed in &lt;em&gt;dimensions&lt;/em&gt;. (Note that in some cases, you can have a &lt;em&gt;Factless Fact&lt;/em&gt; table where the information is entirely in the dimensions). &lt;em&gt;Dimensions&lt;/em&gt; provide different types of data relating to the fact (e.g., date &amp;#38; time of entry, user, product, location, etc.), so a &lt;em&gt;fact&lt;/em&gt; table has a column for each &amp;#8217;&amp;#8217;dimension&amp;#8217;&amp;#8217; with a column for the fact scalar value itself.&lt;/p&gt;


	&lt;p&gt;The &amp;#8217;&amp;#8217;dimension&amp;#8217;&amp;#8217; tables contain an id index column, a column for the fact value (e.g., timestamp for date &amp;#38; time) and columns for each &amp;#8217;&amp;#8217;summary&amp;#8217;&amp;#8217; to be associated with the &lt;em&gt;dimension&lt;/em&gt; (e.g., day of week, day of month, month, year, hour minute, ...).&lt;/p&gt;


	&lt;p&gt;At this point, queries can be performed by joining the dimension and fact tables and summarizing (or counting) the scalar fact value against conditions against the dimension tables (e.g., sales per year by person and region).&lt;/p&gt;


	&lt;p&gt;Typically, this data is pre-summarized in &amp;#8217;&amp;#8217;cubes&amp;#8217;&amp;#8217; with summary tables that contain the results of these summary queries.&lt;/p&gt;


	&lt;p&gt;The &lt;strong&gt;ActiveWarehouse&lt;/strong&gt; plugin contains everything necessary to define, populate and report on this data.&lt;/p&gt;


	&lt;p&gt;I expect to be using this to hold information on user listening habits for &lt;span class="caps"&gt;MP3&lt;/span&gt; files.&lt;/p&gt;


	&lt;p&gt;Gregg Kellogg&lt;/p&gt;</description>
      <pubDate>Sat, 19 May 2007 18:10:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:99f73d7d-2b08-4153-80c7-1fdf0dcf8630</guid>
      <author>gregg@kellogg-assoc.com (Gregg Kellogg)</author>
      <link>http://kellogg-assoc.com/articles/2007/05/19/activewarehouse</link>
      <category>Ruby on Rails</category>
      <trackback:ping>http://kellogg-assoc.com/articles/trackback/31</trackback:ping>
    </item>
  </channel>
</rss>
