Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

Can MDX Case statement do this? Expand / Collapse
Author
Message
Posted Monday, March 3, 2014 12:58 PM
SSC Rookie

SSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC Rookie

Group: General Forum Members
Last Login: Tuesday, May 20, 2014 1:38 PM
Points: 31, Visits: 165
All,

I have developed a cube that tracks the timeliness of certain steps in a business process. Steps are on time if the number of days between 2 dates is <= values that are stored in a table. The fact table for the cube is assigned a Timeliness dimension ID accordingly.

In addition, the users want to be able to play with the results by being able to dynamically enter a cutoff day value. To accommodate this, I have a column in the fact table, called "ElapsedDays" that is the difference between the two dates. My plan was to use this column with a parameter to re-calculate the timeliness dimension. The T-SQL logic would be as follows:

CASE
WHEN ElapsedDays <= @parameter THEN 1 -- On time
WHEn ElapsedDays > @parameter THEN 2 -- Late
ELSE 3 -- Unknown
END AS TimelinessDimID

In essence, I want to substitute my new dimension values for the old ones.

Can this be done in MDX?

TIA,

Mike

Post #1547070
Posted Tuesday, March 4, 2014 2:16 PM
Ten Centuries

Ten CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen Centuries

Group: General Forum Members
Last Login: Yesterday @ 1:01 PM
Points: 1,166, Visits: 1,191
Mike Austin-398977 (3/3/2014)
All,

I have developed a cube that tracks the timeliness of certain steps in a business process. Steps are on time if the number of days between 2 dates is <= values that are stored in a table. The fact table for the cube is assigned a Timeliness dimension ID accordingly.

In addition, the users want to be able to play with the results by being able to dynamically enter a cutoff day value. To accommodate this, I have a column in the fact table, called "ElapsedDays" that is the difference between the two dates. My plan was to use this column with a parameter to re-calculate the timeliness dimension. The T-SQL logic would be as follows:

CASE
WHEN ElapsedDays <= @parameter THEN 1 -- On time
WHEn ElapsedDays > @parameter THEN 2 -- Late
ELSE 3 -- Unknown
END AS TimelinessDimID

In essence, I want to substitute my new dimension values for the old ones.

Yes, you can create a calculated member. Take a look at:

http://technet.microsoft.com/en-us/library/ms146017(v=sql.105).aspx
http://technet.microsoft.com/en-us/library/ms144841(v=sql.105).aspx

If you have the Adventure Works cube, you can try something like:
WITH MEMBER [Measures].x AS
CASE
WHEN [Measures].[Order Count] < 100 THEN 'Low'
WHEN [Measures].[Order Count] < 300 THEN 'Medium'
ELSE 'Large'
END
SELECT
{ [Date].[Calendar].[Month] } ON ROWS,
{ [Measures].[Order Count], [Measures].x } ON COLUMNS
FROM [Adventure Works];

Not exactly what you asked for -- but you should get the idea.

I hope this helps,
Rob
Post #1547559
Posted Wednesday, March 5, 2014 11:36 AM
SSC Rookie

SSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC Rookie

Group: General Forum Members
Last Login: Tuesday, May 20, 2014 1:38 PM
Points: 31, Visits: 165
Thanks for your reply. I inadvertently left out the fact that the cube is going to be the source for reports surfaced in PowerPivot and PerformancePoint. My idea was that the report developers would implement the case statement in their filtering/retrieval of the cube's data. Can the MDX case statement be used this way?

My only other alternative is to add create 60 fact rows for each existing row, which creates its own set of problems...

TIA,

Mike
Post #1547956
Posted Thursday, March 6, 2014 8:14 AM
SSC Eights!

SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!

Group: General Forum Members
Last Login: Friday, July 25, 2014 2:49 PM
Points: 804, Visits: 1,989
My only other alternative is to add create 60 fact rows for each existing row, which creates its own set of problems...


It's not clear to me why you'd do this, unless you mean in another fact table that would then of course have a different level of granularity. My sole caution is that the correct level of granularity for a fact table is crucial. If you don't have a clear grain and then violate it, your cube will produce incorrect data in certain cases.



Post #1548308
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse