March 3, 2014 at 12:58 pm
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
March 4, 2014 at 2:16 pm
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
March 5, 2014 at 11:36 am
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
March 6, 2014 at 8:14 am
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.
Viewing 4 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply