DecisionLab.Netbusiness intelligence is business performance______________________________________________________________...
Business Level: Data visualization -- The good and the bad.     Bad? Good? Why?This flow-map, by C.J. Minard – depicting v...
Bad? Good? Why?     Verdict: Bad (very)___________________________________________________________________________________...
Technical Notes:These visualizations were created using MS PerformancePoint.As an ideal PerformancePoint data source, I cr...
__________________________________________________________________________________________________________________________...
Business Level: On same terms, what distinguishes custom-MDX-driven analytics from out-of-the-box OLAP-based ones?    o Fo...
o Without down-stream manipulations, (SQL, MDX), databases would have to physically      store too much largely-redundant ...
o Custom-MDX provides a semantic layer of data calculations between OLAP cubes and      end-users so that, among other thi...
Q & A: Whether for visualization purpose or otherwise, whereshould various calculated metrics be crunched? o Transactional...
5.   MDX Basics: MDX may be written as expressions in cube         database itself, then consumed / queried like other cub...
Example C: MDX Named Set (also in cube metadata)                  CREATE SET CURRENTCUBE.[Selected Measures - Internet and...
Establish an ad-hoc query capability (in PerformancePoint!!) Self-serve BI, anyone?Notice ‘Selected Measures’ filter, plus...
User-Driven, Ad-Hoc Visualizations from ‘Ad Hoc’ PPS Dashboard Page         Many Examples…         Now, same chart, filter...
Establish a standard time-series dimension against all existing cube metrics – without         re-coding of the time-serie...
Add more time series statistical expressions to time calculationsdimension,with visualization results like…_______________...
Same exact PPS Dashboard chart. User selects different measures, Quarters instead ofMonths, different Time Calculations, o...
Here, PPS Dashboard Designer (DD) and SQL BI Dev Studio (BIDS)    1. SSAS MDX Calc Scripting Tool: How not to lose a finge...
5. All-MDX Time Utility Dimension…             a. Demonstrate (in SSAS Cube Browser) the robustness of Time Utlity Dimensi...
vi. Copy the following script into Notepad, then click Notepad’s “Edit / Replace”. With cursor at top of script, type in s...
FORMAT_STRING="Percent";CREATE MEMBER CURRENTCUBE.[Time Calculations].[YTD] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calcul...
([Time Calculations].[YTD]=Aggregate(CrossJoin({[Time Calculations].[Current Period]},PeriodsToDate([Date].[Calendar].[Cal...
-- Begin Section: Rolling averages (3, 6, 12mos)-- 3 MonthCreate Member CurrentCube.[Time Calculations].[Rolling 3 Month A...
-- Establish Display OrderCREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Standard Deviation] AS NULL, VISI...
CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Avg - 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTC...
) : [Date].[Calendar].CurrentMember }, [Time Calculations].DefaultMember ));([Time Calculations].[Rolling 12 Month Avg + 1...
6. Now, Return to PPS Dashboard Designer             a. Browse (first) previewed dashboard to revisit all discussed soluti...
Thank you!                                  __________________________________________________________________            ...
DecisionLab.Net                                    Range of BI / DW Services Offered:                                    _...
Upcoming SlideShare
Loading in …5
×

Enhancing Dashboard Visuals with Multi-Dimensional Expressions (MDX)

1,285 views

Published on

Here's an original presentation I gave at the SoCal Business Intelligence User Group in 2008. On reviewing it, and although the underlying platforms have evolved since then, the topic still seems relevant.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,285
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Enhancing Dashboard Visuals with Multi-Dimensional Expressions (MDX)

  1. 1. DecisionLab.Netbusiness intelligence is business performance_________________________________________________________________________________________________________________________________________________________________________________________ Enhancing Dashboard Visuals with Multi-Dimensional Expressions(MDX) by Daniel Upton________________________________________________________________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net dupton@decisionlab.net direct 760 525 3268 blog.decisionlab.net Carlsbad, CA
  2. 2. Business Level: Data visualization -- The good and the bad. Bad? Good? Why?This flow-map, by C.J. Minard – depicting vital aspects of Napoleon’s disastrous march on Russia -- is a famous pioneering data visualization due to the amount ofinformation it conveys quickly and with high impact in a limited space. It plots several variables. 1. Size of the French army is depicted by the width of the bands; 2. Geographic location on a two-dimensional surface; 3. Direction of the movement of the advance (tan upper band) and retreat (black lower band); 4. the temperature on certain dates during the retreat (temp. during advance was deemed irrelevant)______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 2 of 28 blog.decisionlab.net Carlsbad, CA
  3. 3. Bad? Good? Why? Verdict: Bad (very)______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 3 of 28 blog.decisionlab.net Carlsbad, CA
  4. 4. Technical Notes:These visualizations were created using MS PerformancePoint.As an ideal PerformancePoint data source, I created an MS Analysis Services 2005 OLAP cube. As aquick review, it supports… 1. Multiple measure groups (fact tables) in the same cube, thus one cube query can span multiple business processes. 2. One dimension may include many hierarchies (same primary key) 3. Referenced dimension relationships, wherein an outrigger dimension’s primary key connects via an intermediate dimension’s foreign key, to facts. 4. Role-playing dimensions, wherein 1 dimension is connected multiple times to multiple foreign keys in one or more measure groups.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 4 of 28 blog.decisionlab.net Carlsbad, CA
  5. 5. ______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 5 of 28 blog.decisionlab.net Carlsbad, CA
  6. 6. Business Level: On same terms, what distinguishes custom-MDX-driven analytics from out-of-the-box OLAP-based ones? o For reporting/analytics, all schema designs require downstream filtering, aggregation, ordering, calculated metrics and formatting. BI front-ends provide limited drag-n-drop querying sophistication. After the initial OLAP-wow factor fades, canned front-end graphic visuals often fall short of business requirements.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 6 of 28 blog.decisionlab.net Carlsbad, CA
  7. 7. o Without down-stream manipulations, (SQL, MDX), databases would have to physically store too much largely-redundant calculated data or, conversely, to provide only limited analytic metrics (no simple ratios, etc), requiring end users to scan carefully to identify problems or opportunities. Notice how hard it is below to find the reseller losses.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 7 of 28 blog.decisionlab.net Carlsbad, CA
  8. 8. o Custom-MDX provides a semantic layer of data calculations between OLAP cubes and end-users so that, among other things, we can easily create high-impact visualizations which bring key metrics (profit $’s, profit margin %’s) right up front for end users.How? In SSAS, write simple MDX expressions that meaningfully translates ‘$’ into ‘%’. In PPS Chart Designer’s (non-stacked) Bar-Chart’s ‘Series’ field, drop in ‘%’ metric ABOVE ‘$’ metric (so the above chart line is in front of bars), thuscreating a multi-axis chart with ‘%’ axis on right side.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 8 of 28 blog.decisionlab.net Carlsbad, CA
  9. 9. Q & A: Whether for visualization purpose or otherwise, whereshould various calculated metrics be crunched? o Transactional databases: Metrics required for transactions (eg. Shipping, Tax, Total Price, Estimated Ship Date) o ETL into Data Mart / Warehouse: Three categories…  Non-dimensional metrics (fixed formulas)  Highly processor-intensive metrics  Metrics for which OLAP stored aggregation levels provide little performance benefit (eg. Median) o Cube: Inherently dimensional metrics, meaning that metric values vary importantly by dimension (time, product, geography) o Report/Dashboard/Spreadsheet:  Array of built-in “query-builder” (MDX and/or SQL) functionality to satisfy unique, report-specific metrics. Best for “one-offs”.  When standardizing, move upstream into OLAP database______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 9 of 28 blog.decisionlab.net Carlsbad, CA
  10. 10. 5. MDX Basics: MDX may be written as expressions in cube database itself, then consumed / queried like other cube members/attributes. Also, all queries against SSAS cubes are MDX queries. Examples… Example A: MDX Expression in cube metadata (in BI Dev Studio’s SSAS Calculation Tab) Create Member CurrentCube.[Measures].[Reseller Gross Profit Margin] As ( [Measures].[Reseller Sales Amount] - [Measures].[Reseller Total Product Cost] ) / [Measures].[Reseller Sales Amount] ,Format_String = "Percent", Associated_Measure_Group = Reseller Sales Example B (in SSMS’s MDX Query Window): MDX Query against cube for a single report (with / without the above expression in cube) With Member [Measures].[Reseller Gross Profit Margin] As ( [Measures].[Reseller Sales Amount] - [Measures].[Reseller Total Product Cost] )/ [Measures].[Reseller Sales Amount] SELECT { [Measures].[Reseller Sales Amount], [Measures].[Reseller Gross Profit] , [Measures].[Reseller Gross Profit Margin] } ON COLUMNS, { [Product].[Category].[Category].ALLMEMBERS } * { [Promotion].[Promotion Type].[Promotion Type].ALLMEMBERS } ON ROWS FROM [Adventure Plays MDX] WHERE [Date].[Calendar Year].[Calendar Year].[CY 2003]______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 10 of 28 blog.decisionlab.net Carlsbad, CA
  11. 11. Example C: MDX Named Set (also in cube metadata) CREATE SET CURRENTCUBE.[Selected Measures - Internet and Reseller Sales] AS { [Measures].[Internet Order Quantity] ,[Measures].[Internet Freight Cost] ,[Measures].[Internet Average Unit Cost] ,[Measures].[Internet Total Product Cost] ,[Measures].[Internet Discount Percentage] ,[Measures].[Internet Sales Amount] ,[Measures].[Internet Tax Amount] ,[Measures].[Internet Ratio to Parent Product] ,[Measures].[Internet Ratio to All Products] ,[Measures].[Internet Gross Profit] ,[Measures].[Internet Gross Profit Margin] -- and,from another measure group ,[Measures].[Reseller Order Quantity] ,[Measures].[Reseller Freight Cost] ,[Measures].[Reseller Average Unit Cost] ,[Measures].[Reseller Total Product Cost] ,[Measures].[Reseller Discount Percentage] ,[Measures].[Discount Percentage] ,[Measures].[Reseller Sales Amount] ,[Measures].[Reseller Tax Amount] ,[Measures].[Internet Ratio to Parent Product] ,[Measures].[Internet Ratio to All Products] ,[Measures].[Reseller Gross Profit] ,[Measures].[Reseller Gross Profit Margin] };______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 11 of 28 blog.decisionlab.net Carlsbad, CA
  12. 12. Establish an ad-hoc query capability (in PerformancePoint!!) Self-serve BI, anyone?Notice ‘Selected Measures’ filter, plus coinciding measures in Chart’s Series. This allows users to select from a longlist of Measures in a PerformancePoint Analytic Chart. How?: In SSAS, create “Selected Measures” MDX Named Set. In PPS Chart Designer, add “Selected Measures” set into Analytic Chart’s “Series” field. In PPS dashboard designer, create “Member Select” (multi- select) filter (multi-select style) on same “Selected Measures” named set.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 12 of 28 blog.decisionlab.net Carlsbad, CA
  13. 13. User-Driven, Ad-Hoc Visualizations from ‘Ad Hoc’ PPS Dashboard Page Many Examples… Now, same chart, filtered by user for new ‘Selected Measures”, open chart Window, change to Stacked Bar… Now, same chart, use picks new measure, drills on Product Model, opens in new window, sorts large to small. So, combining MDX w/ out-of-the-box PPS charting can yield effective ad-hoc visuals.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 13 of 28 blog.decisionlab.net Carlsbad, CA
  14. 14. Establish a standard time-series dimension against all existing cube metrics – without re-coding of the time-series calculations per metric - with resulting visualizations like... The above example shows 3 user-chosen metrics from a long list of available ones.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 14 of 28 blog.decisionlab.net Carlsbad, CA
  15. 15. Add more time series statistical expressions to time calculationsdimension,with visualization results like…______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 15 of 28 blog.decisionlab.net Carlsbad, CA
  16. 16. Same exact PPS Dashboard chart. User selects different measures, Quarters instead ofMonths, different Time Calculations, opens window, chooses stacked barSame chart. User simply selects new directly comparative measure (now Resellers), openswindow, chooses stacked barSo, combining MDX Named Sets, Time Calculations (w/ Named Set), and multiple user-parameters supports significant ad-hoc analysis.______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 16 of 28 blog.decisionlab.net Carlsbad, CA
  17. 17. Here, PPS Dashboard Designer (DD) and SQL BI Dev Studio (BIDS) 1. SSAS MDX Calc Scripting Tool: How not to lose a finger a. Before modifying, save whole script onto Notepad (simple, effective) b. Second, Parse frequently to ensure syntax validity c. Third: Frequently unit test building-block MDX code via cube browser 2. PPS Multi-Axis Chart Trick in DD (Amounts on Y1, Percents on Y2) a. In Analytic Chart designer, drop percentage measure ABOVE non-percentage measure, so that (percent) line stays in front of (not obstructed by) bars (non- percents). 3. MDX Use of “Prior Period” (dynamically level-sensitive). Simple example of dynamics of MDX. 4. MDX ”Named Sets” (underutilized) as Supplement to Individual measures______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 17 of 28 blog.decisionlab.net Carlsbad, CA
  18. 18. 5. All-MDX Time Utility Dimension… a. Demonstrate (in SSAS Cube Browser) the robustness of Time Utlity Dimension b. How To Build It in BI Dev Studio 2005: To do… i. Open a BIDS SSAS project with an existing time dimension. ii. In Data Source View (DSV), in time dimension, add new named calculation for new field named “PeriodID” with value = N’Current Period’. Why?: Will serve as an SSAS dimension foreign-key value from Date (intermediate) dimension to “Time Calculations (referenced) dimension (to be built momentarily). iii. To Do: Create “Time Calculations” dimension 1. Create new (standard) dimension, using “Date” as main dimension table, with ‘PeriodID’ as key column and member name column. 2. Name new dimension “Time Calculations”. Rename attribute to “Time Calculations” 3. Attribute Properties: IsAggregatable = “False”, since we don’t want to aggregate things like “Current Period + YTD + ‘Prior Year’, etc. As such, although the Time Calculation dimension attributes effectively use all other SSAS aggregations, they are not, in themselves, aggregatable. 4. Save and Process dimension iv. To Do: Add Time Calcs… dimension to cube 1. Dimension Usage: Set as referenced dimension to selected measure group, via ‘Time’ intermediate dimension. 2. Do same for other measure groups via Time dimension. v. (Recommended) To Do: Simplify MDX Calcs by Excluding Dimension Name, which is same as attribute (field) name. 1. Cube Structure, Time Calculations Dimension Property: HierarchyUniqueNameStyle: select “ExcludeDimensionName” 2. Save All, Re-Deploy Cube______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 18 of 28 blog.decisionlab.net Carlsbad, CA
  19. 19. vi. Copy the following script into Notepad, then click Notepad’s “Edit / Replace”. With cursor at top of script, type in script’s existing Time (not Time Calculations) dimension name and iteratively replace it with the correct name of your Time (intermediate) dimension (if not simply named ‘Date’, as in this example). vii. Copy/paste your newly-edited script back into BIDS SSAS Calc page and parse to ensure conformity. viii. Sample “Time Calculations” MDX Script: Copy, paste (after renaming attributes to reference your own Time Dimension. (eg. dimOrderDate)--********************************************************************************************************************************************************************-- TIME CALCULATIONS (Populates MDX Shell Dimension)-- ********************************************************************************************************************************************************************-- Create the calculated members...CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Year] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Year Change] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Year Change %] ASIIF([Time Calculations].[Prior Year]=0,NULL,[Time Calculations].[Prior Year Change] / [Time Calculations].[Prior Year]),FORMAT_STRING="Percent";CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Period] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Period Change] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Prior Period Change %] ASIIF([Time Calculations].[Prior Period]=0,NULL,[Time Calculations].[Prior Period Change] / [Time Calculations].[Prior Period]),______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 19 of 28 blog.decisionlab.net Carlsbad, CA
  20. 20. FORMAT_STRING="Percent";CREATE MEMBER CURRENTCUBE.[Time Calculations].[YTD] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[YTD Prior Year] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[YTD Prior Year Change] AS Null;CREATE MEMBER CURRENTCUBE.[Time Calculations].[YTD Prior Year Change %] ASIIF([Time Calculations].[YTD Prior Year]=0,NULL,[Time Calculations].[YTD Prior Year Change] / [Time Calculations].[YTD Prior Year]),FORMAT_STRING="Percent";-- PRIOR YEAR CALCULATIONS([Time Calculations].[Prior Year]=(ParallelPeriod( [Date].[Calendar].[Calendar Year], 1,[Date].[Calendar].currentmember) ,[Time Calculations].[Current Period]));-- PRIOR PERIOD CALCULATIONS([Time Calculations].[Prior Period]=IIF(([Calendar].currentmember.lag(1),[Time Calculations].[Current Period])=0,null,([Calendar].currentmember.lag(1),[Time Calculations].[Current Period])));-- YTD CALCULATIONS ----------------------------______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 20 of 28 blog.decisionlab.net Carlsbad, CA
  21. 21. ([Time Calculations].[YTD]=Aggregate(CrossJoin({[Time Calculations].[Current Period]},PeriodsToDate([Date].[Calendar].[Calendar Year],[Calendar].currentmember))));-- YTD PRIOR YEAR([Time Calculations].[YTD Prior Year]=Aggregate(Crossjoin( {[Time Calculations].[Current Period]},PeriodsToDate( [Date].[Calendar].[Calendar Year],ParallelPeriod( [Date].[Calendar].[Calendar Year],1,[Date].[Calendar].CurrentMember ) ) ) ) );-- Variances which dont depend on a particular hierarchy level-- Prior Year Change([Time Calculations].[Prior Year Change]=[Time Calculations].[Current Period] - [Time Calculations].[Prior Year]);-- Prior Period Change([Time Calculations].[Prior Period Change] =[Time Calculations].[Current Period] - [Time Calculations].[Prior Period]);-- YTD Prior Year Change([Time Calculations].[YTD Prior Year Change] =[Time Calculations].[YTD] - [Time Calculations].[YTD Prior Year]);-- ***************************************______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 21 of 28 blog.decisionlab.net Carlsbad, CA
  22. 22. -- Begin Section: Rolling averages (3, 6, 12mos)-- 3 MonthCreate Member CurrentCube.[Time Calculations].[Rolling 3 Month Avg] As NULL;([Time Calculations].[Rolling 3 Month Avg] = Avg({ ParallelPeriod( [Date].[Calendar].[Month],2, [Date].[Calendar].CurrentMember ) : [Date].[Calendar].CurrentMember}, [Time Calculations].DefaultMember) );-- 6 MonthCreate Member CurrentCube.[Time Calculations].[Rolling 6 Month Avg] As NULL;([Time Calculations].[Rolling 6 Month Avg] = Avg({ ParallelPeriod( [Date].[Calendar].[Month], 5, [Date].[Calendar].CurrentMember ) : [Date].[Calendar].CurrentMember },[Time Calculations].DefaultMember ));-- 12 MonthCreate Member CurrentCube.[Time Calculations].[Rolling 12 Month Avg] As NULL;([Time Calculations].[Rolling 12 Month Avg] = Avg({ParallelPeriod( [Date].[Calendar].[Month],11, [Date].[Calendar].CurrentMember ) : [Date].[Calendar].CurrentMember },[Time Calculations].DefaultMember ) );-- End of Section: Rolling Averages-- ****************************************-- Begin Section: 3,6,12 Mo. Rolling Avgs +/- 1 or 2 Std Devs-- 3 Months ********************______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 22 of 28 blog.decisionlab.net Carlsbad, CA
  23. 23. -- Establish Display OrderCREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Standard Deviation] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Avg + 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Avg + 2 StdDevs] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Avg - 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 3 Month Avg - 2 StdDevs] AS NULL, VISIBLE = 1;-- Establish Actual Calculated Values([Time Calculations].[Rolling 3 Month Standard Deviation] = Stdev( { ParallelPeriod( [Date].[Calendar].[Month],2, [Date].[Calendar].CurrentMember) : [Date].[Calendar].CurrentMember }, [Time Calculations].DefaultMember ));([Time Calculations].[Rolling 3 Month Avg + 1 StdDev] = [Time Calculations].[Rolling 3 Month Avg] + [Time Calculations].[Rolling 3 Month StandardDeviation]);([Time Calculations].[Rolling 3 Month Avg - 1 StdDev] = [Time Calculations].[Rolling 3 Month Avg] - [Time Calculations].[Rolling 3 Month StandardDeviation]);([Time Calculations].[Rolling 3 Month Avg + 2 StdDevs] = [Time Calculations].[Rolling 3 Month Avg] + (2*[Time Calculations].[Rolling 3 MonthStandard Deviation]));([Time Calculations].[Rolling 3 Month Avg - 2 StdDevs] = [Time Calculations].[Rolling 3 Month Avg] - (2*[Time Calculations].[Rolling 3 MonthStandard Deviation]));-- 6 Months ********************-- Establish Display Order without effecting solve orderCREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Standard Deviation] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Avg + 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Avg + 2 StdDevs] AS NULL, VISIBLE = 1;______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 23 of 28 blog.decisionlab.net Carlsbad, CA
  24. 24. CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Avg - 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 6 Month Avg - 2 StdDevs] AS NULL, VISIBLE = 1;-- Establish Actual Calculated Values([Time Calculations].[Rolling 6 Month Standard Deviation] = Stdev( { ParallelPeriod( [Date].[Calendar].[Month], 5, [Date].[Calendar].CurrentMember) : [Date].[Calendar].CurrentMember }, [Time Calculations].DefaultMember ));([Time Calculations].[Rolling 6 Month Avg + 1 StdDev] = [Time Calculations].[Rolling 6 Month Avg] + [Time Calculations].[Rolling 6 Month StandardDeviation]);([Time Calculations].[Rolling 6 Month Avg - 1 StdDev] = [Time Calculations].[Rolling 6 Month Avg] - [Time Calculations].[Rolling 6 Month StandardDeviation]);([Time Calculations].[Rolling 6 Month Avg + 2 StdDevs] = [Time Calculations].[Rolling 6 Month Avg] + (2*[Time Calculations].[Rolling 6 MonthStandard Deviation]));([Time Calculations].[Rolling 6 Month Avg - 2 StdDevs] = [Time Calculations].[Rolling 6 Month Avg] - (2*[Time Calculations].[Rolling 6 MonthStandard Deviation]));-- 12 Months ********************-- Establish Display OrderCREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 12 Month Standard Deviation] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 12 Month Avg + 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 12 Month Avg + 2 StdDevs] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 12 Month Avg - 1 StdDev] AS NULL, VISIBLE = 1;CREATE MEMBER CURRENTCUBE.[Time Calculations].[Rolling 12 Month Avg - 2 StdDevs] AS NULL, VISIBLE = 1;-- Establish Actual Calculated Values([Time Calculations].[Rolling 12 Month Standard Deviation] = Stdev( { ParallelPeriod( [Date].[Calendar].[Month], 11, [Date].[Calendar].CurrentMember______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 24 of 28 blog.decisionlab.net Carlsbad, CA
  25. 25. ) : [Date].[Calendar].CurrentMember }, [Time Calculations].DefaultMember ));([Time Calculations].[Rolling 12 Month Avg + 1 StdDev] = [Time Calculations].[Rolling 12 Month Avg] + [Time Calculations].[Rolling 12 MonthStandard Deviation]);([Time Calculations].[Rolling 12 Month Avg - 1 StdDev] = [Time Calculations].[Rolling 12 Month Avg] - [Time Calculations].[Rolling 12 MonthStandard Deviation]);([Time Calculations].[Rolling 12 Month Avg + 2 StdDevs] = [Time Calculations].[Rolling 12 Month Avg] + (2*[Time Calculations].[Rolling 12 MonthStandard Deviation]));([Time Calculations].[Rolling 12 Month Avg - 2 StdDevs] = [Time Calculations].[Rolling 12 Month Avg] - (2*[Time Calculations].[Rolling 12 MonthStandard Deviation]));-- End of Section: 3,6,12 Mo. Rolling Avgs +/- 1 or 2 Std Devs-- End of Time Series Calculations (Populates MDX Shell Dimension)-- ***--***************************************************************************************************************************************************************************************************************************************************************************************************************************************** ix. Next To Do: Parse newly copied script to ensure MDX conformity. x. Save All, then Re-deploy project. xi. Cube Browser: Drop a Date (intermediate dimension) hierarchy onto rows, Time Calculations onto columns and a few selected measures into main data section. xii. Reference: Shroyer, David, OLAP Solutions. Link: http://www.obs3.com/______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 25 of 28 blog.decisionlab.net Carlsbad, CA
  26. 26. 6. Now, Return to PPS Dashboard Designer a. Browse (first) previewed dashboard to revisit all discussed solution concepts b. Optionally: re-build various reports / filters / dashboard zones / zone settings / cache / image. c. Questions and Answers______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 26 of 28 blog.decisionlab.net Carlsbad, CA
  27. 27. Thank you! __________________________________________________________________ Enhancing Dashboard Visualizations With Multi-Dimensional Expressions (MDX) Presented by Daniel Upton DecisionLab.Net __________________________________________________________________ Blog: blog.decisionlab.net Site: www.decisionlab.net Email: dupton@decisionlab.net______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 27 of 28 blog.decisionlab.net Carlsbad, CA
  28. 28. DecisionLab.Net Range of BI / DW Services Offered: _________________________________________ Business Requirements / Feasibility Analysis for Data Warehousing and Business Intelligence Logical Data Architecture: Integration of Related Business Processes Into Common Analytic Schema Physical DW/DM Design and Development Data Extraction, Transformation, Loading (SSIS): When others won’t. Multi-Dimensional Cubes w/ MS Analysis Services (SSAS)  Fewer, faster, more granular & more comprehensive cubes  Multiple complex business processes per cube  Multi-Dimensional Expressions (MDX) Dashboard Development: MS PerformancePoint, Tableau, et al Report Development: MS Reporting Services (SSRS)______________________________________________________________________________________________________________________________________DecisionLab www.decisionlab.net info@decisionlab.net direct 760.525.3268Page 28 of 28 blog.decisionlab.net Carlsbad, CA

×