Some thoughts:
- I would put physican, specialty, and the affiliations into one dimension, say "physican" as separate attributes, and the build a user hierarchy from the affiliations.
- This leaves you with three dimensions: time, physican, and registry (I do not understand the details of this from your description), and one fact table.
- The fact table should contain the two measures "patients population" and "patients seen". "patients population" is the number of patients per physican, time, and registry. I would assume it is not aggregatable across time. You would have to decide which aggregation you use across time, e. g.
LastChild
, i. e. each month shows the value of its last day, each year the value of its last month, etc. For the "patients seen", I am not sure what you want to do: Should this be distinct patients seen? In this case, you cannot aggregate across time. You would have to have the data on patient level, and link the patient dimension (possibly just consisting of the patient id and invisible to end users) via a many-to-many relationship to the main fact table. Then the measure could be a DistinctCount. - "Score" would be a simple calculated measure - simply
[Measures].[patients seen] / [Measures].[patients population]
. - YTD and MAT is normally implemented as calculated members in MDX as well. The best solution would be using a utility dimension (see e. g. http://sqlblog.com/blogs/marco_russo/archive/2007/09/02/datetool-dimension-an-alternative-time-intelligence-implementation.aspx). But for the POC, you can also just implement it on a per query base in the
WITH clause
: Define it as a member of your time hierarchy using theYtd
andParallelPeriod
functions. - For the Quartile, I think the best way - at least for the POC - woudl be implementing this in a query specific
WITH
clause in the MDX that you write in SSRS. I would rank the set on which you want to calculate the quartiles, and then use aCASE
expression with fourWHEN
clauses for the four quartiles, something like `WHEN rank >= count / 4 and rank < count / 2 THEN "Q2", where you would have to decide how to exactly handle the borderline cases.