OWB 11gR2 – Degenerate Dimensions

Posted by David Allan on Oracle Blogs See other posts from Oracle Blogs or by David Allan
Published on Mon, 03 May 2010 16:31:44 -0800 Indexed on 2010/05/04 0:49 UTC
Read the original article Hit count: 659

Ever wondered how to build degenerate dimensions in OWB and get the benefits of slowly changing dimensions and cube loading? Now its possible through some changes in 11gR2 to make the dimension and cube loading much more flexible. This will let you get the benefits of OWB's surrogate key handling and slowly changing dimension reference when loading the fact table and need degenerate dimensions (see Ralph Kimball's degenerate dimensions design tip).

Here we will see how to use the cube operator to load slowly changing, regular and degenerate dimensions. The cube and cube operator can now work with dimensions which have no surrogate key as well as dimensions with surrogates, so you can get the benefit of the cube loading and incorporate the degenerate dimension loading. What you need to do is create a dimension in OWB that is purely used for ETL metadata;

  • the dimension itself is never deployed (its table is, but has not data)
  • it has no surrogate keys
  • has a single level with a business attribute the degenerate dimension data and a dummy attribute, say description just to pass the OWB validation.

When this degenerate dimension is added into a cube, you will need to configure the fact table created and set the 'Deployable' flag to FALSE for the foreign key generated to the degenerate dimension table. The degenerate dimension reference will then be in the cube operator and used when matching.

Create the degenerate dimension using the regular wizard.

degenerate1

Delete the Surrogate ID attribute, this is not needed.

degenerate2

Define a level name for the dimension member (any name).

degenerate3

After the wizard has completed, in the editor delete the hierarchy STANDARD that was automatically generated, there is only a single level, no need for a hierarchy and this shouldn't really be created.

degenerate4

Deploy the implementing table DD_ORDERNUMBER_TAB, this needs to be deployed but with no data (the mapping here will do a left outer join of the source data with the empty degenerate dimension table). Now, go ahead and build your cube, use the regular TIMES dimension for example and your degenerate dimension DD_ORDERNUMBER, can add in SCD dimensions etc.

degenerate5

Configure the fact table created and set Deployable to false, so the foreign key does not get generated.

degenerate6

Can now use the cube in a mapping and load data into the fact table via the cube operator, this will look after surrogate lookups and slowly changing dimension references.
degenerate7

 

If you generate the SQL you will see the ON clause for matching includes the columns representing the degenerate dimension columns.

degenerate8

Here we have seen how this use case for loading fact tables using degenerate dimensions becomes a whole lot simpler using OWB 11gR2. I'm sure there are other use cases where using this mix of dimensions with surrogate and regular identifiers is useful, Fact tables partitioned by date columns is another classic example that this will greatly help and make the cube operator much more useful. Good to hear any comments.

© Oracle Blogs or respective owner

Related posts about etl

Related posts about How to ...