<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6130189227781570206</id><updated>2011-11-27T17:20:42.480-08:00</updated><category term='ALL POST'/><category term='ADAPT'/><category term='CALENDAR'/><category term='BI'/><title type='text'>BI 101</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bizintell101.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bizintell101.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Minkjan</name><uri>http://www.blogger.com/profile/08228393663535024706</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-SU_qzV4eLCQ/TlPYSv7saBI/AAAAAAAAD1E/vQ0SuyZiBJI/s220/ciber_Foto_Small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6130189227781570206.post-5274071860681985721</id><published>2009-11-08T10:09:00.001-08:00</published><updated>2009-11-08T10:09:11.100-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADAPT'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='ALL POST'/><title type='text'>BI 101 ADAPT modeling</title><content type='html'>&lt;p&gt;A good white paper on ADAPT modeling:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.symcorp.com/downloads/ADAPT_white_paper.pdf" href="http://www.symcorp.com/downloads/ADAPT_white_paper.pdf"&gt;http://www.symcorp.com/downloads/ADAPT_white_paper.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Very useful if the party you communicating with is not deep into BI terminology. It comes with it own visio template:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.symcorp.com/downloads/ADAPTv3_visio_stencil.zip" href="http://www.symcorp.com/downloads/ADAPTv3_visio_stencil.zip"&gt;http://www.symcorp.com/downloads/ADAPTv3_visio_stencil.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Till Next Time &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130189227781570206-5274071860681985721?l=bizintell101.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bizintell101.blogspot.com/feeds/5274071860681985721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6130189227781570206&amp;postID=5274071860681985721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/5274071860681985721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/5274071860681985721'/><link rel='alternate' type='text/html' href='http://bizintell101.blogspot.com/2009/11/bi-101-adapt-modeling.html' title='BI 101 ADAPT modeling'/><author><name>John Minkjan</name><uri>http://www.blogger.com/profile/08228393663535024706</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-SU_qzV4eLCQ/TlPYSv7saBI/AAAAAAAAD1E/vQ0SuyZiBJI/s220/ciber_Foto_Small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130189227781570206.post-49235727018064878</id><published>2009-10-29T11:30:00.001-07:00</published><updated>2009-10-29T11:30:28.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CALENDAR'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='ALL POST'/><title type='text'>BI 101 a generic calendar dimension</title><content type='html'>&lt;p&gt;Within BI at least 98 % of the reporting is time based. They show the facts aggregated over a certain period.&lt;/p&gt;  &lt;p&gt;When designing a DWH often little time is invested in setting up the calendar dimension and it’s related tables. Net result is that later on certain info is missing and therefore making easy querying tricky. In this article I want to give you a head start in designing a future proof calendar dimension.&lt;/p&gt;  &lt;p&gt;The basic calendar hierarchy often looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_qd3TDEvIh4Y/SunfO57HWhI/AAAAAAAACJg/Zjiop4RnPi8/s1600-h/image11.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_qd3TDEvIh4Y/SunfQaoWOkI/AAAAAAAACJk/GkK9UjeR9ns/image_thumb5.png?imgmax=800" width="374" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now which information do we need to store for each level?&lt;/p&gt;  &lt;p&gt;First of all it’s very handy to make all your key’s readable, so for instance make your YearId like 1900, 1901, 1902 … 2099 instead of 1,2,3, … 199.&lt;/p&gt;  &lt;h2&gt;Year&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;YearId, integer, Primary Key =&amp;gt; 2000 (YEAR) &lt;/li&gt;    &lt;li&gt;Year, varchar(10) =&amp;gt; “2000” &lt;/li&gt;    &lt;li&gt;YearShort, varchar(10) =&amp;gt; “ ‘00” &lt;/li&gt;    &lt;li&gt;YearLong, varchar(60) =&amp;gt; “twothousand” &lt;/li&gt;    &lt;li&gt;YearRemark, varchar(4000) =&amp;gt; “take over over ACME inc.” &lt;/li&gt;    &lt;li&gt;YearStartDT, DateTime =&amp;gt; “01-JAN-2000 00:00:00” &lt;/li&gt;    &lt;li&gt;YearEndDT, DateTime =&amp;gt; “31-DEC-2000 23:59:59” &lt;/li&gt;    &lt;li&gt;YearLastYear, interger =&amp;gt; 1999 &lt;/li&gt;    &lt;li&gt;YearIsLeapYear, Bit =&amp;gt; 1 &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Quarter&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;QuarterId, integer, Primary Key =&amp;gt;20001 (YEAR*10 + QUARTER) &lt;/li&gt;    &lt;li&gt;Quarter, varchar(10) =&amp;gt; “2000 Q1” &lt;/li&gt;    &lt;li&gt;QuarterNumber, integer =&amp;gt; 1..4 &lt;/li&gt;    &lt;li&gt;QuarterShort, varchar(10) =&amp;gt; “ ‘Q1” &lt;/li&gt;    &lt;li&gt;QuarterLong, varchar(60) =&amp;gt; “ first quarter 2000” &lt;/li&gt;    &lt;li&gt;QuarterRemark, varchar(4000) =&amp;gt; “Arizona storage flooded” &lt;/li&gt;    &lt;li&gt;QuarterStartDT, DateTime =&amp;gt; “01-JAN-2000 00:00:00” &lt;/li&gt;    &lt;li&gt;QuarterStartDT, DateTime =&amp;gt; “31-MAR-2000 23:59:59” &lt;/li&gt;    &lt;li&gt;YearId, integer, Foreign Key Year =&amp;gt; 2000 &lt;/li&gt;    &lt;li&gt;QuarterLastYear, integer =&amp;gt; 19991 &lt;/li&gt;    &lt;li&gt;QuarterLastQuarter, integer =&amp;gt; 19994 &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Month&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;MonthId, integer, Primary Key =&amp;gt; 200001 (YEAR*100 + MONTH) &lt;/li&gt;    &lt;li&gt;Month, varchar(10) =&amp;gt; “2000 M01” &lt;/li&gt;    &lt;li&gt;MonthNumber, integer =&amp;gt; 1..12 &lt;/li&gt;    &lt;li&gt;MonthShort, varchar(10) =&amp;gt; “Jan” &lt;/li&gt;    &lt;li&gt;MonthShortSort, varchar(10) =&amp;gt; “(01) – Jan” &lt;/li&gt;    &lt;li&gt;MonthLong, varchar(60) =&amp;gt; “January 2000” &lt;/li&gt;    &lt;li&gt;MonthRemark, varchar(4000) =&amp;gt; “Alaska branch closed down” &lt;/li&gt;    &lt;li&gt;MonthStartDT, DateTime =&amp;gt; “01-JAN-2000 00:00:00” &lt;/li&gt;    &lt;li&gt;MonthEndDT, DateTime =&amp;gt; “31-JAN-2000 23:59:59” &lt;/li&gt;    &lt;li&gt;YearId, integer, Foreign Key Year =&amp;gt;2000 &lt;/li&gt;    &lt;li&gt;QuarterId, integer, Foreign Key Quarter =&amp;gt;20001 &lt;/li&gt;    &lt;li&gt;MonthLastYear, integer =&amp;gt;199901 &lt;/li&gt;    &lt;li&gt;MonthLastQuarter, integer =&amp;gt; 199909 &lt;/li&gt;    &lt;li&gt;MonthLastMonth, integer =&amp;gt; 199912 &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Week&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;WeekId, integer, Primary Key =&amp;gt; 200001 (YEAR*100 + WEEK) &lt;/li&gt;    &lt;li&gt;Week, varchar(10) =&amp;gt; “2000 W01” &lt;/li&gt;    &lt;li&gt;WeekNumber, integer =&amp;gt; 1..52(53) &lt;/li&gt;    &lt;li&gt;WeekShort, varchar(10) =&amp;gt; “week 01” &lt;/li&gt;    &lt;li&gt;WeekLong, varchar(60) =&amp;gt; “2000 week 01” &lt;/li&gt;    &lt;li&gt;WeekRemark, varchar(4000) =&amp;gt; “Texas branch closed down for holidays” &lt;/li&gt;    &lt;li&gt;WeekStartDT, DateTime =&amp;gt; “03-JAN-2000 00:00:00” &lt;/li&gt;    &lt;li&gt;WeekEndDT, DateTime =&amp;gt; “09-JAN-2000 23:59:59” &lt;/li&gt;    &lt;li&gt;YearId, integer, Foreign Key Year =&amp;gt; 2000 &lt;/li&gt;    &lt;li&gt;QuarterId, Integer, Foreign Key Quarter =&amp;gt; 20001 &lt;/li&gt;    &lt;li&gt;MonthId, Integer, Foreign Key Month =&amp;gt; 200001 &lt;/li&gt;    &lt;li&gt;WeekLastYear, integer =&amp;gt; 199901 &lt;/li&gt;    &lt;li&gt;WeekLastQuarter, integer =&amp;gt; 199939 &lt;/li&gt;    &lt;li&gt;WeekLastMonth, integer =&amp;gt; 199950 &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Day&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;DayId, integer, Primary Key =&amp;gt; 200000101 (YEAR*10000 + MONTH*100 + DAY) &lt;/li&gt;    &lt;li&gt;Day, varchar(10) =&amp;gt; “20000101” &lt;/li&gt;    &lt;li&gt;DayNumber, integer =&amp;gt; 1..365(366) &lt;/li&gt;    &lt;li&gt;DayDate, Date =&amp;gt; “01-JAN-2000” &lt;/li&gt;    &lt;li&gt;DayShort, varchar(10) =&amp;gt; “01/01/2000” &lt;/li&gt;    &lt;li&gt;DayLong, varchar(60) =&amp;gt; “January First 2000” &lt;/li&gt;    &lt;li&gt;DayOfWeek, integer =&amp;gt; 1…7 &lt;/li&gt;    &lt;li&gt;DayWeekDayName, varchar(60) =&amp;gt; “Monday” &lt;/li&gt;    &lt;li&gt;DayRemark, varchar(4000) =&amp;gt; “boxing day” &lt;/li&gt;    &lt;li&gt;DayStartDT, DateTime =&amp;gt; “01-JAN-2000 00:00:00” &lt;/li&gt;    &lt;li&gt;DayEndDT, DateTime =&amp;gt; “31-JAN-2000 23:59:59” &lt;/li&gt;    &lt;li&gt;DayIsHoliday, Bit, 1 &lt;/li&gt;    &lt;li&gt;YearId, integer, Foreign Key Year =&amp;gt; 2000 &lt;/li&gt;    &lt;li&gt;QuarterId, Integer, Foreign Key Quarter =&amp;gt; 20001 &lt;/li&gt;    &lt;li&gt;MonthId, Integer, Foreign Key Month =&amp;gt; 200001 &lt;/li&gt;    &lt;li&gt;WeekId, Integer, Foreign Key Week =&amp;gt; 200001 &lt;/li&gt;    &lt;li&gt;DayLastYear, integer =&amp;gt; 19990101 &lt;/li&gt;    &lt;li&gt;DayLastQuarter, integer =&amp;gt; 19990901 &lt;/li&gt;    &lt;li&gt;DayLastMonth, integer =&amp;gt; 19991201 &lt;/li&gt;    &lt;li&gt;DayLastWeek, integer =&amp;gt; 19991224 &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Shift (optional)&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;ShiftId, integer, Primary Key =&amp;gt; 200010101 (YEAR*1000000 + MONTH*10000 + DAY*100 +SHIFTNUMBER) &lt;/li&gt;    &lt;li&gt;Shift, varchar(60) =&amp;gt; “2000101S01” &lt;/li&gt;    &lt;li&gt;ShiftNumber, integer =&amp;gt; 1..X &lt;/li&gt;    &lt;li&gt;ShiftCodeShort, varchar(60), “01/01/2000 S1” &lt;/li&gt;    &lt;li&gt;ShiftCodeLong, varchar(60), “01 January 2000 Shift 1” &lt;/li&gt;    &lt;li&gt;ShiftRemark, varchar(60), “New years eve 1999” &lt;/li&gt;    &lt;li&gt;ShiftStartDT, DateTime =&amp;gt; “31-DEC-1999 22:00:00” &lt;/li&gt;    &lt;li&gt;ShiftEndDT, DateTime =&amp;gt; “01-JAN-2000 05:59:59” &lt;/li&gt;    &lt;li&gt;YearId, integer, Foreign Key Year =&amp;gt; 2000 &lt;/li&gt;    &lt;li&gt;QuarterId, integer, Foreign Key Quarter =&amp;gt; 20001 &lt;/li&gt;    &lt;li&gt;MonthId, Integer, Foreign Key Month =&amp;gt; 200001 &lt;/li&gt;    &lt;li&gt;WeekId, Integer, Foreign Key Week =&amp;gt; 200001 &lt;/li&gt;    &lt;li&gt;DayId, integer, Foreign Key Day (optional) =&amp;gt; 20000101 &lt;/li&gt;    &lt;li&gt;ShiftLastYear, integer =&amp;gt; 1999010101 &lt;/li&gt;    &lt;li&gt;ShiftLastQuarter, integer =&amp;gt; 1999090101 &lt;/li&gt;    &lt;li&gt;ShiftLastMonth, integer =&amp;gt; 1999120101 &lt;/li&gt;    &lt;li&gt;ShiftLastWeek, integer =&amp;gt; 1999122401 &lt;/li&gt;    &lt;li&gt;ShiftLastDay, integer =&amp;gt; 1999123101 &lt;/li&gt;    &lt;li&gt;ShiftLastShift, integer =&amp;gt; 1999123103 &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;PeriodLastPeriod columns&lt;/h3&gt;  &lt;p&gt;These are used for easy Period Ago analysis. Simple join an alias of your fact table “shifted back” in time. This way you can easily created columns like YAGO, MAGO, WAGO&lt;/p&gt;  &lt;h3&gt;PeriodStartDT PeriodEndDT columns&lt;/h3&gt;  &lt;p&gt;Not all calendars start at the first of a period. Especially fiscal and production calendars will have there own start and end date. &lt;/p&gt;  &lt;h3&gt;PeriodRemark Columns&lt;/h3&gt;  &lt;p&gt;Used for keeping historical records of events which might have disrupted normal operations.&lt;/p&gt;  &lt;h3&gt;3NF or one flat table&lt;/h3&gt;  &lt;p&gt;The arguments for putting the whole calendar dimension into one table are often only technical. They are based on the believe that a flat table is always quicker then separate tables. With modern db like Oracle10G or MS-SQL 2005 the query analyzers are clever enough (with proper indexing) to handle separated tables without loss of performance. (I’ve seen case where separated tables are quicker.)&lt;/p&gt;  &lt;p&gt;From a modeling standpoint it’s better to use separate tables especially if you are using aggregated tables. (It doesn’t need to perform costly distinct operations on the calendar table to get the unique month keys.)&lt;/p&gt;  &lt;p&gt;Till Next Time&lt;/p&gt;  &lt;p&gt;If you have any extra columns which I should add feel free to post them&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130189227781570206-49235727018064878?l=bizintell101.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bizintell101.blogspot.com/feeds/49235727018064878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6130189227781570206&amp;postID=49235727018064878' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/49235727018064878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/49235727018064878'/><link rel='alternate' type='text/html' href='http://bizintell101.blogspot.com/2009/10/bi-101-generic-calendar-dimension.html' title='BI 101 a generic calendar dimension'/><author><name>John Minkjan</name><uri>http://www.blogger.com/profile/08228393663535024706</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-SU_qzV4eLCQ/TlPYSv7saBI/AAAAAAAAD1E/vQ0SuyZiBJI/s220/ciber_Foto_Small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_qd3TDEvIh4Y/SunfQaoWOkI/AAAAAAAACJk/GkK9UjeR9ns/s72-c/image_thumb5.png?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130189227781570206.post-8741100793815345086</id><published>2008-02-15T02:29:00.000-08:00</published><updated>2008-02-15T02:31:46.384-08:00</updated><title type='text'>Welcome to BI 101</title><content type='html'>&lt;p&gt;Hi,&lt;/p&gt;&lt;p&gt;My name is John Minkjan and I'm a senior BI-consultant at &lt;a href="http://www.ciber.nl/"&gt;CIBER&lt;/a&gt; in the Netherlands. I reserverd a couple of ...101 blogspots. At the moment I'm mostly active on &lt;a href="http://obiee101.blogspot.com/"&gt;OBIEE101&lt;/a&gt;. I will start posting here as soon as something intressting to report on BI in general about .&lt;/p&gt;&lt;p&gt;Till Next Time&lt;/p&gt;&lt;p&gt;John&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130189227781570206-8741100793815345086?l=bizintell101.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bizintell101.blogspot.com/feeds/8741100793815345086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6130189227781570206&amp;postID=8741100793815345086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/8741100793815345086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130189227781570206/posts/default/8741100793815345086'/><link rel='alternate' type='text/html' href='http://bizintell101.blogspot.com/2008/02/welcome-to-bi-101.html' title='Welcome to BI 101'/><author><name>John Minkjan</name><uri>http://www.blogger.com/profile/08228393663535024706</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-SU_qzV4eLCQ/TlPYSv7saBI/AAAAAAAAD1E/vQ0SuyZiBJI/s220/ciber_Foto_Small.jpg'/></author><thr:total>0</thr:total></entry></feed>
