Skip to main content

Slowly changing dimensions

Slowly changing dimensions in MSTR

Slowly changing dimensions (SCDs) are a common characteristic in many business intelligence environments. Usually, dimensional hierarchies are presented as independent of time. For example, a company may annually reorganize their sales organization or recast their product hierarchy for each retail season. “Slowly” typically means after several months or even years. Indeed, if dimensional relationships change more frequently, it may be better to model separate dimensions.
SCDs are well documented in the data warehousing literature. Ralph Kimball has been particularly influential in describing dimensional modeling techniques for SCDs (see The Data Warehouse Toolkit, for instance). Kimball has further coined different distinctions among ways to handle SCDs in a dimensional model. For example, a Type I SCD presents only the current view of a dimensional relationship, a Type II SCD preserves the history of a dimensional relationship, and so forth.
The discussion below is based on an example sales organization that changes slowly in time as the territories are reorganized; for example, sales representatives switch districts in time.

As-is vs. as-was analysis

One of the capabilities available with slowly changing dimensions is the ability to perform either “as-is” analysis or “as-was” analysis:
“As-is” analysis presents a current view of the slowly changing relationships. For example, you can display sales by District according to the way Districts are organized today.
“As-was” analysis presents a historical view of the slowly changing relationships. For example, you can display sales by District according to the way Districts were organized at the time the sales transactions occurred.
The techniques described here provide the flexibility to perform either type of analysis. They also provide you an easy way to specify which type of analysis you would like to perform.

Example 1: Compound key with Effective Date and End Date

One way to physically store an SCD is to employ Effective Date and End Date columns that capture the period of time during which each element relationship existed. In the example below, Sales Rep Jones moved from District 37 to District 39 on 1/1/2004, and Kelly moved from District 38 to 39 on 7/1/2004.
For information on compound keys, please refer to Lookup tables: Attribute storage.
LU_SALES_REP
Sales_Rep_ID
Sales_Rep_Name
District_ID
Eff_Dt
End_Dt
1
Jones
37
1/1/1900
12/31/2003
2
Smith
37
1/1/1900
12/31/2099
3
Kelly
38
1/1/1900
6/30/2004
4
Madison
38
1/1/1900
12/31/2099
1
Jones
39
1/1/2004
12/31/2099
3
Kelly
39
7/1/2004
12/31/2099
When using this type of dimensional lookup table, the fact table must include a date field, such as a transaction date.
FACT_TABLE
Sales_Rep_ID
Trans_Dt
Sales
1
9/1/2003
100
2
9/10/2003
200
3
9/15/2003
150
1
3/1/2004
200
2
3/10/2004
250
3
3/15/2004
300
2
9/5/2004
125
3
9/15/2004
275
4
9/20/2004
150

To specify the MicroStrategy schema

1Create a logical view to represent just the current District-Sales Rep relationships.
LVW_CURRENT_ORG
select Sales_Rep_ID, District_ID
from LU_SALES_REP
where End_Dt = '12/31/2099'
2Create another logical view that performs the “as-was” join between the lookup table and fact table, resulting in a fact view at the District level.
The resulting view is an “as-was” or historical view, which captures the Sales Rep-District relationships that existed at the time the transactions occurred.
LVW_HIST_DISTRICT_SALES
select District_ID, Trans_Dt, sum(sales)
sales 
from LU_SALES_REP L
join FACT_TABLE F
on(L.Sales_Rep_ID = F.Sales_Rep_ID)
where F.Trans_Dt between L.Eff_Dt and
L.End_Dt
group by District_ID, Trans_Dt
3Create a table alias LU_CURRENT_DISTRICT for LU_DISTRICT.
4Define the following attributes:
Sales Rep:
@ID = sales_rep_id; @Desc = sales_rep_name
Tables: LU_SALES_REP (lookup), LVW_CURRENT_ORG, FACT_TABLE
Current District:
@ID = district_id; @Desc = district_name
Tables: LU_CURRENT_DISTRICT (lookup), LVW_CURRENT_ORG
Child: Sales Rep
Historical District:
@ID = district_id; @Desc = district_name
Tables: LU_DISTRICT (lookup), LU_SALES_REP, LVW_HIST_DISTRICT_SALES
Child: Sales Rep
Date:
@ID = date_id, trans_dt
Tables: LU_TIME (lookup) , FACT_TABLE, LVW_HIST_DISTRICT_SALES
Month:
@ID = MONTH_ID
Tables: LU_TIME (lookup)
5Define the Sales fact:
Expression: sales
Tables: FACT_TABLE, LVW_HIST_DISTRICT_SALES
6Define the metric as required:
Sales: SUM(sales)
The result of this is a logical schema that looks like the following:

As-was analysis

Specify the “as-was” analysis by using the Historical District attribute on reports:
Report definition: Historical District, Month, Sales
Resulting SQL
Select a11.District_ID District_ID,
max(a13.District_Name) District_Name,
a12.Month_ID Month_ID,
sum(a11.SALES) WJXBFS1
From (select District_ID, Trans_dt,sum(sales) sales
from LU_SALES_REP L
join FACT_TABLE F
on (L.Sales_rep_ID = F.Sales_rep_ID)
where F.trans_dt between L.EFF_DT and
L.END_DT
group by District_ID, Trans_dt)
a11
join LU_TIME a12
on (a11.Trans_dt = a12.Date_ID)
join LU_DISTRICT a13
on (a11.District_ID = a13.District_ID)
group by a11.Distrcit_ID,
a12.Month_ID
Report results

As-is analysis

Specify the “as-is” analysis by using the Current District attribute on reports:
Report definition: Current District, Month, Sales
Resulting SQL
select a12.District_ID District_ID,
max (a14.District_Name) District_Name,
a13.Month_ID Month_ID,
sum(a11.SALES) WJXBFS1
from FACT_TABLE a11
join (select Sales_rep_ID, District_ID
from LU_SALES_REP
where END_DT = '12/31/2099')a12
on (a11.Sales_Rep_ID =
a12.Sales_Rep_ID)
join LU_TIME a13
on (a11.Trans_dt = a13.Date_ID)
join LU_DISTRICT a14
on (a12.District_ID = a14.District_ID)
group by a12.District_ID,
a13.Month_ID
Report result

Example 2: New surrogate key for each changing element

A more flexible way to physically store a SCD is to employ surrogate keys and introduce new rows in the dimension table whenever a dimensional relationship changes. Another common characteristic is to include an indicator field that identifies the current relationship records. An example set of records is shown below.
LU_SALES_REP
Sales_Rep_CD
Sales_Rep_ID
Sales_Rep_Name
District_ID
Current_Flag
1
1
Jones
37
0
2
2
Smith
37
1
3
3
Kelly
38
0
4
4
Madison
38
1
5
1
Jones
39
1
6
3
Kelly
39
1
When using this type of dimensional lookup table, the fact table must also include the surrogate key. A transaction date field may or may not exist.
FACT_TABLE
Sale-Rep_CD
Sale
1
100
2
200
3
150
5
200
2
250
3
300
2
125
6
275
4
150

Specifying the MicroStrategy schema

1Create a logical view to represent just the current District-Sales Rep relationship.
LVW_CURRENT_ORG
select Sales_rep_ID, District_ID
from LU_SALES_REP
where Current_flag = 1
2Create a table alias LU_CURRENT_DISTRICT for LU_DISTRICT.
3Define the following attributes:
Sales Rep Surrogate:
@ID = sales_rep_cd
Tables: LU_SALES_REP (lookup), FACT_TABLE
Sales Rep:
@ID = sales_rep_id; @Desc = sales_rep_name
Tables: LU_SALES_REP (lookup), LVW_CURRENT_ORG
Child: Sales Rep Surrogate
Current District:
@ID = district_id; @Desc = district_name
Tables: LU_CURRENT_DISTRICT (lookup), LVW_CURRENT_ORG
Child: Sales Rep
Historical District:
@ID = district_id; @Desc = district_name
Tables: LU_DISTRICT (lookup), LU_SALES_REP
Child: Sales Rep
Date:
@ID = date_id, trans_dt
Tables: LU_TIME (lookup), FACT_TABLE
Month:
@ID = MONTH_ID
Tables: LU_TIME (lookup)
Child: Date
4Define the Sales fact:
Expression: sales
Tables: FACT_TABLE, LVW_HIST_DISTRICT_SALES
5Define the metric as required:
Sales: SUM(sales)
The result is a logical schema as follows:

As-was analysis

Specify the “as-was” analysis by using the Historical District attribute on reports:
Report definition: Historical District, Month, Sales
Resulting SQL
select a12.District_ID District_ID,
max(a14.Distrcit_Name) Distrcit_Name,
a13.Month_ID Month_ID,
sum(a11.SALES) WJXBFS1
from FACT_TABLE a11
join LU_SALES_REP a12
on (a11.Sales_Rep_CD =
a12.Sales_Rep_CD)
join LU_TIME a13
on (a11.Trans_dt = a13.Date_ID)
join LU_DISTRICT a14
on (a12.District_ID =
a14.District_ID)
group by a12.District_ID, 
a13.Month_ID
Report results

As-is analysis

Specify the “as-is” analysis by using the Current District attribute on reports:
Report definition: Current District, Month, Sales
Resulting SQL:
select a13.District_ID District_ID,
max(a15.Distrcit_Name) District_Name,
a14.Month_ID Month_ID,
sum(a11.SALES) WJXBFS1
from FACT_TABLE a11
join LU_SALES_REP a12
on (a11.Sales_Rep_CD =
a12.Sales_Rep_CD)
join (select Sales_rep_ID, District_ID
from LU_SALES_REP
where current_flag = 1) 
a13
on (a12.Sales_Rep_ID =
a13.Sales_Rep_ID)
join LU_TIME a14
on (a11.Trans_dt = a14.Date_ID)
join LU_DISTRICT a15
on (a13.District_ID =
a15.District_ID)
group by a13.District_ID,
a14.Month_ID
Report result

Comments

Popular posts from this blog

Derived metric based on attribute values

Derived metric based on attribute values Here is how could create and display data correctly on using below simple steps.  Create a report with Category, Subcategory and Revenue. Create New Metric in a report or VI.  Case((Category@ID = 1), Revenue, 0) Booksand Name it as Revenue for  where 2 is Category ID for "Books"  Report will display result as below.  Result for new metric is blank. Now to fix this create a new Derived metric on Category attribute first with formula as  Max(Category) {~ }  and calling Books Now Edit the "Revenue for Books metric and Replace Category@ID with this new Books metric formula would looks like this  Case((Books = 1), Revenue, 0).  Report result would now display as expected as shown below

Microstrategy Custom number formatting symbols

Custom number formatting symbols If none of the built-in number formats meet your needs, you can create your own custom format in the Number tab of the Format Cells dialog box. Select  Custom  as the Category and create the format using the number format symbols listed in the table below. Each custom format can have up to four optional sections, one each for: Positive numbers Negative numbers Zeros Text Each section is optional. Separate the sections by semicolons, as shown in the example below: #,###;(#,###);0;"Error: Entry must be numeric" For more examples, see  Custom number formatting examples . To jump to a section of the formatting symbol table, click one of the following: Numeric symbols Character/text symbols Date and time symbols Text color symbols Currency symbols Conditional symbols Numeric symbols For details on how numeric symbols apply to the Big Decimal data type, refer to the  Project Design Guide . ...

mstrio – Python and R wrappers for the MicroStrategy

mstrio – Python and R wrappers for the MicroStrategy REST APIs Connecting to MicroStrategy  Create a connection to the Intelligence Server using   Connection()   and    connect()  in Python and R, respectively. Required arguments for the   Connection()  function are the URL for the MicroStrategy REST API server, MicroStrategy Intelligence Server username and password, as well as the MicroStrategy project name. By default, the   connect()  function anticipates your MicroStrategy Intelligence Server username and password. LDAP authentication is also supported. Use the optional argument    login_mode=16    in the    connect()  function for LDAP authentication.  Extract data from cubes and reports  To extract data from MicroStrategy cubes and reports, use the   get_cube()  and   get_report()  functions. Use...

Microstrategy Dossiers explained

Microstrategy  Dossiers With the release of MicroStrategy 10.9, we’ve taken a leap forward in our dashboarding capabilities by simplifying the user experience, adding storytelling, and collaboration.MSTR has  evolved dashboards to the point that they are more than dashboards - they are  interactive, collaborative analytic stories . Ultimately, it was time to go beyond dashboards, both in concept and in name, and so  the've  renamed VI dashboards to  ‘ dossiers ’.  Dossiers can be created by using the new Desktop product or Workstation or simply from the Web interface which replaces Visual Insights. All the existing visual Insights dashboards will be converted to Dossiers   With MicroStrategy 10.9, there was an active focus on making it easier to build dashboards for the widest audience of end users. To achieve this, some key new capabilities were added that make it easier to author, read, interact and collaborate on dashboards ...

Documents with derived attributes cannot be edited within MicroStrategy Developer 10.x

Documents with derived attributes cannot be edited within MicroStrategy Developer 10.x When trying to edit a document created in MicroStrategy Web using MicroStrategy Developer 10.x, the 'Edit' button is found greyed out and inaccessible as per the screenshot below. When navigating to the same document in MicroStrategy Web 10.x, it is possible to edit the document. STEPS TO REPRODUCE: Create a document in MicroStrategy Developer or Web 10.x with any number of attributes. See below: Notice in Developer, you can currently right click on this document and select the 'Edit' option. Open up the same document in MicroStrategy Web 10.x and add a derived attribute, right clicking an attribute and selecting Insert new attribute. Save the report in MicroStrategy Web 10.x with the same name. Open MicroStrategy Developer 10.x, and right click the document, you will notice that the Edit option is greyed out as seen below: Navigate to the same document wi...

Retrieve a list of user groups and the associated users in MicroStrategy Developer 9.x / 10.x

Retrieve a list of user groups and the associated users in MicroStrategy Developer Follow the steps below to create a list of all groups and the users in each group: In MicroStrategy Developer 9.x, select 'Project Documentation' from the Tools menu to start the wizard. Select any project that is in the project source that contains the users and groups and click Next. Select only Configuration Objects for documentation. Uncheck the 'Basic Properties' object category from the next screen, as shown below: Then select only 'User Group' under the Configuration Objects section and only 'Groups' and 'Members' under the Definition section, as shown below: Go through the rest of the wizard, and open the resulting documentation. After navigating down to the User Groups, the documentation should look similar to the following image: This page shows every group, any child groups, and all members of each group.

Create an alert-based subscription in MicroStrategy Distribution Services

Create an alert-based subscription in MicroStrategy Distribution Services on Web Subscription to a report or Report Services document which will be executed when a certain conditional threshold is met based on another executing report. For example, a scheduled report executes which shows the Revenue by day for the past week. If the Revenue on any one day falls below a certain value, a subscription to another report or Report Services document can be triggered and delivered to a recipient. An alert based subscription can only be created directly on a report; however, another report or Report Services document can be delivered when the alert based subscription is triggered. Note: you need a grid report to create an alert and you cannot create if you want to create on a document with text boxes. The following example will walk through the basic steps on how to setup a subscription based on an alert like this: Follow the brief  steps bel...

MicroStrategy URL API Parameters

MicroStrategy URL Structure The following table summarizes the root URL structure used for every request to MicroStrategy Web. Environment Main Application URL Administration URL J2EE http://webserver/MicroStrategy/servlet/mstrWeb http://webserver/MicroStrategy/servlet/mstrWebAdmin .NET http://webserver/MicroStrategy/asp/Main.aspx http://webserver/MicroStrategy/asp/Admin.aspx Every request sent to MicroStrategy Web calls a central controller. Parameters are appended to  Main.aspx  or  mstrWeb  (in a .NET and J2EE environment, respectively) to indicate to the controller how the request should be internally forwarded and handled. The following examples show a URL for accessing a MicroStrategy folder when the user does not have an existing session. The URL contains not only the parameters needed to connect to MicroStrategy Web, but also the parameters needed to log on and create a session. J2EE environment: <a href="http:...

HTML image as a button that exports a grid on a document to Excel in MicroStrategy

HTML Image as a Button That Exports a Grid on a Document to Excel in MicroStrategy In MicroStrategy Web, it is possible to use an image as a button to export a grid on a document to Excel in MicroStrategy version 10.4 and later. This document provides the steps to accomplish the same.  The goal is to create an image link that is used to export the grid, like shown below: Document in Edit Mode Follow the steps below: 1. Create a Report Services Document 2. Make two grids with different attributes and metrics in each  3. Insert an HTML   container   (and not an image) and insert the script below. Make sure the Project name matches the given project and gridKey matches ( highlighted in bold in the script below). The code below is used for the first grid and button. Main things to watch are the  gridKey  values and the name of the element id which in the below code is  exportLink .   <a target="_blank" id="exportLink" href=""...

Microstrategy "Error type: Odbc error. Odbc operation attempted

 "Error type: Odbc error. Odbc operation attempted: SQLExecDirect. [HYT00:0: on SQLHANDLE] [MicroStrategy][ODBC Oracle Wire Protocol driver]Timeout expired" is shown when executing reports from Web When users are trying to execute some reports in MicroStrategy web in particular, they may receive the Error “SQL Generation Complete Index out of range” and “Timeout expired” error as shown below: Possible Causes: One possible cause is that the MicroStrategy Intelligence Server using a cached database connection that was already dropped by the RDBMS. To resolve this: Admin should delete the database connection caches and create a new DSNs in case they are sharing DSNs to connect to different databases. In addition, change the settings for the ‘Connection lifetime’ and the ‘Connection idle time out’.  Follow the steps below to perform the mentioned changes and verify the report after each step and some of the settings require i-server r...