Professional Documents
Culture Documents
Topics
Normalized versus denormalized data modeling
strategies.
General approaches to modeling operational vs. star
and snowflake schemas.
How to create logical table sources when you have
metrics from tables that don't join to a logical
dimension.
How, when and where to set outer joins.
General OBIEE Metadata Modeling Best Practices.
Normalized Model
Snowflake
Star
performance joins
Not talked about much within Oracle (??)
Requires bit-mapped indexes on fact table foreign keys
(among other things)
Has been used in analytic applications
Demo
Dimensionalize
Separate aggregatable from non-aggregatable
columns
Logical dimension tables are collections of nonaggregatable columns whose values are functionally
dependent on the logical table key
X is logical table key, Y is another attribute
each X value is associated with precisely one Y value
Dimensionalization Corollaries
No non-aggregatable columns in logical fact tables
No logical fact table keys
Model non-aggregatable columns as separate
dimension table
SQL generated will reflect physical joins
Logical joins will determine join type (inner, outer)
development expected)
Build base measures mapped to sources at lowest grain
Add logical dimension tables and logical joins
Create dimensions and hierarchies
Add additional base measures (from higher grain sources) set
aggregate levels of sources
Add aggregate sources (fact and dimension)
Create compound measures
Test
Rename
Presentation layer (folders, column names) finalized but
extendable
Security (groups, authentication, permissions, initialization
blocks, filters)
Complex SQL
See sample from Siebel forecasting
Metadata development will take a lot of time
VALUEOF("ETLRunDateMinusInterval")
DWH: Forecasting.Forecasts."Forecast Date" <=
VALUEOF("ETLRunDateMinusInterval")
Amount
select
sum(T18915."Amount") as c1,
T18912."Employee" as c2
from
"EmpDept" T18909,
"Employees" T18912,
"Facts" T18915
where
Amount
select
sum(T18915."Amount") as c1,
T18912."Employee" as c2
from
"Employees" T18912,
"Facts" T18915
where
Employee
Amount
select
sum(T18915."Amount") as c1,
T18912."Employee" as c2
from
"Employees" T18912,
"EmpDept" T19037,
"Facts" T18915
where
select
sum(T18915."Amount") as c1,
T18912."Employee" as c2 from
"Employees" T18912,
"Facts" T18915
where
No need to have
this in the
CUSTOMERS
logical table
source
Months
Items
Data
If Months is
being used as a
formal time
dimension, the
complex join is
not allowed.
Create K/FK join
where K=1 for
all rows, FK= 1.
Query Setup
Add Month
OK
Add Sales
OK
Add Month