Have you presented a session at a user group or a conference? No? then read on to find out why you need to change that.
Many of the readers of this blog will be active members of the SQL Server community, reading/writing blogs themselves, going to conferences or user groups, partitipating in webinars, etc. We’re fortunate in the UK to have the most active SQL Server community in the World. Yes there are physically more user groups and conferences in the US, but per capita the UK had over twice as many SQL Server conferences as the US last year. So if you’re in the UK you don’t have any excuse to get involved. That doesn’t mean the rest of the world misses out – There were 85 SQL Saturdays around the world in 2013, half of those were outside the US. And then there are user groups, other conferences and webinars etc.
Attending these events is one thing, and will without question help your career through increased knowledge but also networking (the who’s who of SQL Server are all at these events).
But to really benefit the most you need to consider speaking.
“Speaking?!?” I hear you cry, “No chance” – followed by a number of excuses:
- Speaking is only for the experts, I don’t know enough
- It’s far too scary – I couldn’t stand up and talk in front of 500 people for an hour
- Why would anyone select me to speak? No-one knows me
- What if I was asked a question I couldn’t answer? I’d look stupid, they’d laugh me off the stage
- Why should I bother, I wouldn’t get anything from it
Ok, so let me work through these one by one
Speaking is only for the experts, I don’t know enough
Yes the top experts in the world come and speak at conferences, but not everyone wants to have their brain fried by a Brent Ozar, or be dazzled by system internals from MVPs and MCMs. Some people want to learn the basics. Conferences always feature a selection of levels from 100 through 500 (‘introduction’ through to ‘WTF?!’). If no-one presented the basic beginners introduction to topics, how would anyone start to learn new skills?
There will ALWAYS be people that know more than you, but conversely there will ALWAYS be people who know less than you about a particular topic.
Therefore even if you’re not an expert, your experience will be of interest to someone, and you could help them learn.
It’s far too scary – I couldn’t stand up and talk in front of 500 people for an hour
*Yes – I get that*
You’re absolutely on the money here, it is scary. In the same way diving off the 10m board at your local swimming baths is pretty terrifying. At first. Your first go on a roller coaster was a little daunting. But you loved it right?
The rest of the community is here to help you here. You wouldn’t dive straight off the 10m board would you? You’d start on the 1m, then work up to 3m, then 5m before trying the big one.
It’s the same with speaking. Start off doing an informal talk to 10-20 people at your local user group, or doing a 2-5 minute lightning talk at a bigger event. Use those to find your feet and get used to being on stage. Use these to refine material, get constructive feedback, and improve your slides, demos and patter.
Before you know it you’ll be desperate to get on the big stage!
Why would anyone select me to speak? No-one knows me
*Because you’re different*
When trying to select speakers for an event, it’s great to have new faces, new topics, or even new perspectives on old topics – it adds variety to the line-up. In your work, you’ve picked up different skills than someone else in a different job using the same tools – so your personal experience is new to an audience, they haven’t heard about the problems that YOU have solved and how YOU solved them. Your personal experience is what makes you different, and interesting.
It’s also handy if you’ve presented the session before to a test audience – it will give the selectors confidence that you can do it. See earlier point about practising at a user group… Being an active part of the user group scene is a good way of getting to know conference organisers, and of course other like minded people in your area – always good for networking.
What if I was asked a question I couldn’t answer? I’d look stupid, they’d laugh me off the stage
Yes there’s a good chance there will be someone in the audience who knows more than you about a specific topic, or who asks a question that you can’t answer. But the SQL community is a VERY friendly place. We’re all there to learn, not to humiliate you on stage. If you don’t know the answer to a question just be honest; say I’m sorry I don’t know the answer to that, but let me look into it afterwards and I’ll get back to you. That then feeds back into your own knowledge, and you can incorporate the answer into your slides for the next time you give the talk.
No-one will mind if you don’t know the answer – you will NOT be laughed off stage!
Why should I bother, I wouldn’t get anything from it
This is actually why I started to think about writing this post. I was watching a SciShow YouTube video (presented by the awesome Hank Green) which talked about how you learn more when you teach than by just reading/revising/etc. (If you watch the video, the segment starts at 1:49). It’s based on research from Washington University, which found that you can learn something up to 25-50% better when you’re planning on teaching the material to someone else.
This really struck a chord with me. One of the reasons that I write this blog and present at conferences is that it helps me learn. If I find a new and interesting item or topic I read about it, I investigate it and play around. If time allows I then write a blog, if the blog gains traction then I turn it into a talk. This process helps me focus on the topic, and helps structure my own investigation and learning. Every time I present on a topic I get feedback and questions, this then helps me learn even more by investigating the answers to those questions – it’s a great learning cycle.
In the processes it helps other learn, and everyone wins. Smashing.
Going back to the second point, yes I found it a little daunting at first. It took me a few user group talks to find my rhythm, but when I got selected for my first talk at SQLBits I was ready, and I got such an immense buzz from it – and I haven’t looked back since.
If you don’t currently attend SQL community events (in fact, not just SQL – any tech!) then get involved.
If you attend but don’t speak – do give it some serious thought – you may just surprise yourself!
If you don’t know where to look for community activities, here are some starting points for you:
- UK SQL Server User Groups – in your local town/city, every month or two, 3 hours in an evening, free.
- SQL Relay – full day SQL conferences, touring the UK annually (8 events in October 13-31 2014), free.
- SQLBits – 3 day mega conference in the UK annually, paid/free
- SQL Saturday – 2 day local conferences, all over the world, paid/free
- PASS – Professional Association of SQL Server, SQL user groups worldwide, free
- PASS Summit – the largest SQL conference in the world – in the US, paid
SQLBits X Video Now available
The video of my talk at SQLBits X is now available on the SQLBits website here. The talk was focused on presenting the results of my MSc Business Intelligence dissertation, comparing the performance of different methods of using SSIS to load data warehouse dimensions, specifically type 2 SCDs.
The talk also covers a comparison of the performance between traditional hard disks and solid state storage systems such as Fusion IO.
I then present a method of using the T-SQL Merge statement to automate a significant part of the ETL process.
You can find the code behind the demos on various recent Frog-Blog posts, and there is more to come, so look back soon!
- Introduction to T-SQL Merge Basics
- Using T-SQL Merge to Load SCD Dimensions
- Automating T-SQL Merge to Load SCD Dimensions
PASS BI Virtual Chapter Talk
For those that would rather hear the talk presented live, or want to ask any questions, please join me at a repeat of this talk over Live Meeting for the PASS BI Virtual Chapter on Thursday 28th June, at 5pm UK time, 12pm EDT (US). You can find the details on the PASS BI chapter website here
SQL Relay: Free, Full Day SQL Server Events
If you’ve not heard the news yet, then where have you been hiding?! With SQLBits X such a phenomenal success, but already a distant memory, we’re all looking for the next SQL Server community event to learn, network and enjoy.
The 2012 SQL Relay, following on from the great inaugural events last year, have now been announced and registration is open.
Where are they?
- Monday 21st May – Edinburgh
- Tuesday 22nd May – Manchester
- Wednesday 23rd May – Birmingham
- Thursday 24th May – Bristol
- Wednesday 30th May – London
Each event is different, but with a common theme. The awesome line-up of speakers include:
- Morris Novello, Microsoft, SQL Server Product Manager
- Andrew Fryer, Microsoft, Technical Evangelist [blog|twitter]
- Allan Mitchell, MVP [blog|twitter]
- Chris Testa O’Neill, MVP [blog|twitter]
- Chris Webb, MVP [blog|twitter]
- Martin Bell, MVP [blog]
- Jamie Thompson, MVP [blog|twitter]
- Tony Rogerson, MVP [blog|twitter]
As well as sessions from Microsoft partners and sponsors.
How big are these events?
Each of the 5 venues have different capacities, but in the region of 100-120 attendees per event.
What’s the format?
Each event has a morning session, in which the Microsoft speakers and partners will cover the technical challenges facing IT, and an overview of SQL 2012 and its new features that can help.
The afternoon sessions will be technical deep dives by the selection of World class MVPs.
Some events will also have an evening session, which will extend the technical sessions until 9pm, to cater for those who can’t get time off work!
You can come to 1, 2 or all 3 sessions, just mark your preference during registration.
How can this be free?!
Thanks to the kind generosity of our sponsors, who include:
|Silver Sponsor||Fusion IO|
Say no more… Sign me up!
Thought you’d say that – register at SQLServerFAQ.com
I’m delighted to be running the Birmingham event, so look forward to seeing you there!
This is the 3rd post in the Frog-Blog series on the awesomeness of T-SQL Merge.
- Post 1: Introduction to T-SQL merge basics
- Post 2: Using T-SQL merge to load data warehouse dimensions
In this post we’ll be looking at how we can automate the creation of the merge statement to reduce development time and improve reliability and flexibility of the ETL process. I discussed this in the 2nd half of a talk I gave at the UK technical launch of SQL Server 2012 at SQLBits X. Thank you to the great audience who came to that talk, this post is for your benefit and is a result of the feedback and requests from you guys.
Why automate merge?
As we saw in the previous post, merge is an incredibly powerful tool when loading data into data warehouse dimensions (specifically SCDs – slowly changing dimensions). The whole process can be wrapped up into a very neat stored proc which can save a considerable mount of time writing the equivalent functionality in SSIS. In the next installment of this series I’ll be discussing the performance of it compared to other methods of loading SCDs in SSIS (take a look at the SQLBits talk video [when it’s released] for a preview!). Suffice to say for now that in my [pretty comprehensive] tests it’s one of the fastest methods of loading SCDs.
If you missed the talk, you can download the slide deck here whilst you’re waiting for the video.
The problem that stops a lot of people using merge is the perceived complexity of the statement. It can be very easy to get things wrong, with pretty bad consequences on your dimension data.
The easiest way to avoid this complexity and simplify the process is to not write merge statements, but let an automated procedure to it for you – Simples!.
The other huge benefit is that, as we’ll see during this post, you can base the automation procedure on metadata, meaning that you can change the SCD functionality of your dimensions just by changing metadata, and not rewriting your code.
Note that in this post we’ll just be looking at Type 0 and 1 SCDs, not 2, 3 or 6. This is to keep things simple. Once you’ve mastered type 0 and 1, it’s a logical next step to expand things to deal with type 2s.
OK, so how do we do this?
First of all we need to set up two tables to use. Let’s create a simple Customer dimension. Alongside this we also need a staging table. I’m a big fan of using schemas to differentiate tables, so we’ll create dim.Customer and etl.Customer as our two tables.
CREATE SCHEMA [dim] AUTHORIZATION [dbo] GO CREATE SCHEMA [etl] AUTHORIZATION [dbo] GO CREATE TABLE [dim].[Customer]( [CustomerKey] [int] IDENTITY(1,1) NOT NULL, [Email] [varchar](255) NOT NULL, [FirstName] [varchar](50) NOT NULL, [LastName] [varchar](50) NOT NULL, [DoB] [date] NOT NULL, [Sex] [char](1) NOT NULL, [MaritalStatus] [varchar](10) NOT NULL, [FirstCreated] [date] NOT NULL, [IsRowCurrent] [bit] NOT NULL, [ValidFrom] [datetime] NOT NULL, [ValidTo] [datetime] NOT NULL, [LastUpdated] [datetime] NOT NULL CONSTRAINT [PK_DimCustomer] PRIMARY KEY CLUSTERED ( [CustomerKey] ASC )) GO CREATE TABLE [etl].[Customer]( [Email] [varchar](255) NOT NULL, [FirstName] [varchar](50) NOT NULL, [LastName] [varchar](50) NOT NULL, [DoB] [date] NOT NULL, [Sex] [char](1) NOT NULL, [MaritalStatus] [varchar](10) NOT NULL, [FirstCreated] [date] NOT NULL )
So the dim table contains our primary surrogate key, business key (email address in this case), customer details and a series of audit fields (IsRowCurrent, ValidFrom, etc.). The etl staging table only contains the business key and customer details.
We then need to store the details of each field. i.e. how should each field be interpreted – is it a primary key, business, key, type 0 or 1, or an audit field. We need this so that we can put the correct fields into the correct place in the merge statement. You could create a table to store this information, however I prefer to use the extended properties of the fields.
EXEC sys.sp_addextendedproperty @level2name=N'CustomerKey', @value=N'PK' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'Email', @value=N'BK' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'FirstName', @value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'LastName', @value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'DoB', @value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'Sex', @value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'MaritalStatus',@value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'FirstCreated', @value=N'1' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'ValidFrom', @value=N'Audit' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'ValidTo', @value=N'Audit' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'IsRowCurrent', @value=N'Audit' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN' EXEC sys.sp_addextendedproperty @level2name=N'LastUpdated', @value=N'Audit' , @name=N'SCD', @level0type=N'SCHEMA',@level0name=N'Dim', @level1type=N'TABLE',@level1name=N'Customer', @level2type=N'COLUMN'
Or you can obviously just enter the extended property manually using SSMS
The SSIS package should output all customer records into the etl table, with no regard for whether they are new customers, old customers, changed or not. The merge statement will take care of that.
The first stage is to examine the structure of merge.
MERGE [DIMENSION TABLE] as Target USING [STAGING TABLE] as Source ON [LIST OF BUSINESS KEY FIELDS] WHEN MATCHED AND Target.[LIST OF TYPE 1 FIELDS] <> Source.[LIST OF TYPE 1 FIELDS] THEN UPDATE SET [LIST OF TYPE 1 FIELDS] = Source.[LIST OF TYPE 1 FIELDS] WHEN NOT MATCHED THEN INSERT [LIST OF ALL FIELDS] VALUES Source.[LIST OF ALL FIELDS]
The text in black is the skeleton of the statement, with the text in red being the details specific to the dimension. It’s these red items which we need to retrieve from the metadata of the dimension in order to create the full merge statement.
We can retrieve the extended properties using the sys.extended_properties DMV. This allows us to pull out a list of all fields which have a specific extended property set, e.g. all PK fields, all BK fields, all type 2 fields etc. etc. If we then put a few of these queries into cursors, we can loop through them and build up a dynamic SQL query. Yes I know, dynamic SQL should be avoided and is evil etc., however… this use is an exception and does truly make the World a better place.
I’m not going to explain the resulting proc in minute detail, so instead please just download it here and work through it yourself. I will however explain a couple of items which are pretty important:
It’s important to keep the naming convention of your dimensions consistent. This doesn’t mean that every dimension must be identical, some may need inferred member support, some may need type 2 tracking fields (e.g. IsRowCurrent) and some may not; the critical thing is that all of your fields, if they do exist, should be named consistently. The automation proc can then look for specific field names and include them in the merge statement if necessary.
There is a parameter in the proc called @Execute. This offers the possibility of either executing the resulting merge statement directly, or just printing out the statement. If you only want to use this to automate the development process then this allows you to do just that, you can then just copy and paste the resulting statement into SSIS or into a stored proc.
The automated generation of T-SQL merge statement to handle type 0 & 1 SCDs!
Hopefully you can see how you can expand this to also cope with Type 2 SCDs, following the structure in my earlier posts.
Download the SQL scripts here
I’m thrilled to have been asked to present another session at SQLBits X, especially so as it’s set to be the biggest and best Bits yet.
It’s the official UK launch of SQL Server 2012, and as such there’s an impressive collection of Microsoft folk attending and presenting, alongside the MVPs and internationally renowned speakers that we now come to expect at SQL Bits.
The Saturday is now sold out, but (as of writing this) there are still some places available on the Thursday and Friday, but these are unlikely to stay available for long so head to www.SQLBits.com and get your name down asap.
Loading Data Warehouse Dimensions
The session that I’ll be presenting will cover different techniques of using SSIS to load data into data warehouse dimensions. Specifically a performance comparison of the methods when loading Type 2 slowly changing dimensions, as well as showing the impact of using solid state storage such as Fusion IO.
I’ll also be covering the details of how to use the T-SQL Merge statement to take care loading dimensions, and showing why it’s now my preferred approach.
SQL User Group Community
I’ll also be there representing SQLMidlands, a SQL Server user group in Birmingham. User group leaders from around the UK will be presenting a session on Saturday lunchtime, as well as staffing the community corner.
If you’re interested in getting involved with your local user group, if you just want to find out more, or are at your first SQLBits and want a friendly face to chat to – find me & the other UG leaders at the community corner.
Look forward to seeing you there!
PowerPivot Vs QlikView 101 – SQLBits Video
The video is now available from my PowerPivot and QlikView talk at SQLBits 9 in Liverpool in September 2011. You can download or watch the video here.
In this 1 hour session I create interactive dashboards from scratch in both PowerPivot and QlikView, showing how to set up the data model, overcome common pitfalls and build the dashboards. I create almost identical dashboards in both systems and highllight the pros and cons of each system.
You can find the scripts and code to go with this video in this blog post
SQLBits 10 is coming!!
Today the SQLBits organisers have announced that SQLBits 10 will be held in London between 29th – 31st March 2012 in the Novotel London West. It’s going to be even bigger and better, so keep an eye on the website and get your tickets early.
Thank you to the SQLBits committee, speakers, helpers and attendees, for making SQLBits 9 one of the best yet. What a great example SQLBits is of the power of the SQL Server community coming together to help each other, and enjoy a few beers in the process!
I was delighted to have my “PowerPivot & QlikView 101” session chosen by the committee, which I presented on Saturday afternoon. Thank you to all those who attended, great to see such a good number there. If you haven’t yet submitted your feedback for my session, and the event as a whole, please do take the time to do it. It helps everyone improve the quality of the event for next time.
For those who atttended my session, here are the slides, with a summary of the results and code etc.
QlikView Script: Download the QlikView Script here
PowerPivot Workboook: Download the PowerPivot workbook here
Session Video: The session recording isn’t yet available, I’ll post a link here when it’s ready.
Sales Amount Visual Cue for the green shading
Upper: (SUM(TOTAL SalesAmount) / COUNT(TOTAL SalesTerritoryRegion))*1.2
Lower: (SUM(TOTAL SalesAmount) / COUNT(TOTAL SalesTerritoryRegion))*0.8
Sales Amount blue bar Guage maximum
Sales Amount Year to Date
Sales Amount Previous Year
PowerPivot DAX Expressions
Sales Amount Year to Date
=TOTALYTD(SUM(FactInternetSales[SalesAmount]), DimOrderDate[FullDateAlternateKey], ALL(DimOrderDate))
Sales Amount Previous Year
=CALCULATE(SUM(FactInternetSales[SalesAmount]), SAMEPERIODLASTYEAR(DimOrderDate[FullDateAlternateKey]), ALL(DimOrderDate))
If you have any questions about any of this, please get in touch.
Back in September 2010 I spent another evening with the Cardiff SQL Server User Group, run by Adam Morton. Having got so much out of the Cardiff group since its inception, both as an attendee and as a regular speaker, it struck me as a shame that there wasn’t a group represting the SQL community in my area of the UK, the Midlands.
Following a few conversations with Adam Morton, Tony Rogerson, Chris Testa-O’Neil and others, Hollie (my patient and supportive Wife and business partner!) and I decided to launch a new SQL Server user group for the Midlands.
With a few months of planning, we invited Allan Mitchell and Neil Hambley to speak at our first event in March 2011, held in a fabulous pub in central Birmingham, the Old Joint Stock. We’re now planning our third event to be held at the start of October as part of the national SQL Relay event, and the group is growing from strength to strength with 30 attendees at the last meeting.
Now, in August 2011, we’re delighted that we’ve been accepted as an official PASS chapter (The Professional Association of SQL Server). This will help provide global recognition of the group, increasing its visiblity and hopefully generating even more awareness and attendees.
To mark the event, we’ve launched a new website for the group www.SQLMidlands.com
We’re incredibly lucky to have such an active, diverse and friendly SQL Server community in the UK. You only have to look at the phenominal success of the SQLBits conference as well as the user groups and SQLSocial. I’ve personally gained a lot from being a part of it, in terms of learning skills, networking, presenting talks and making new friends. I’d like to take this opportunity to thank the community leaders for all their hard work, especially the organisers of SQLBits, who go above and beyond the call of duty every 6 months.
And it’s not all about SQL Server, the SQLSocial event last week was pretty much just an excuse to go to the Great British Beer Festival and celebrate Simon Sabin’s birthday!
If you’ve not got involved before, ask yourself these questions:
- Do you want to learn more about SQL Server?
- Do you want to meet other SQL Server beginners or professionals, and discuss tech, career, beer, or anything else that springs to mind?
- Are you new to this and just want to know what’s out there?
- Do you want an opportunity to present a SQL Server based talk to like minded people?
If you answer yes to any of the above, then here are some resources for you
SQLServerFaq – All SQL Server User Groups in the UK
SQL Bits – Europe’s largest and best SQL Server conference, held every 6 months
SQL Social – Does what it says on the tin!
SQL Pass – SQL Server conference held in Seattle, U.S.A.
SQL Rally Nordic – SQL Server conference in Sweeden
The above events are not only top quality, with world leading speakers, some are also free. The user groups, SQLSocial and the community day of SQLBits are totally free – where else can you get that kind of training without paying a fortune?!
You’ll even get to hear me present another talk at SQLBits, I’m talking about PowerPivot and QlikView, with a level 200 introduction into self service BI and how these two products compare.
With so much going on in the UK and abroad, and with such quality, help yourself as well as the community – get yourself registered for some of the events.
It only seems like yesterday since the SQLBits crew put on their awesome 8th conference in Brighton. The next conference has just been announced, SQLBits will move to Liverpool for SQLBits 9 – “Query Across The Mersey” (…Really?!) between September 29th and October 1st.
Registration’s not yet open, but you can find out more at www.SQLBits.com
I’ve already submitted two sessions to present, “PowerPivot & QlikView 101” and “Advanced data modelling for data warehousing and cubes”. Make sure you vote for them when voting opens! You can read full summaries of all sessions submitted so far here.
SQL User Groups
We’ve also got a busy time coming up with the UK SQL Server user groups. I’ll be running the next Birmingham user group the week after SQLBits, on Monday 3rd October. The agenda and speakers have yet to be set, but it should be a goodun!
I’ll also be speaking at the Southampton user group in 2 weeks time, on Wednesday 6th July. I’ll be presenting my 3 part blog post on automating SSAS cube documentation. Matt Whitfield will also be presenting, so it should be a good night. Now stop reading this and go and register!!
Automating OLAP cube documentation – SQLBits presentation
For anyone that missed my presentation at SQLBits 8 in April, the video is now available here.
In this 1 hour session I present a method of automating the creation of documentation for SSAS OLAP cubes by using DMVs (dynamic management views) and spatial data, querying the metadata of the cube in realtime.
The results include the BUS matrix, star schemas, attribute lists, hierarchies etc. and are all presented in SSRS.
You can view the slide deck here