| Chris 的个人资料Chris Webb's BI Blog日志列表 | 帮助 |
|
2009/2/25 Madison and SSAS?On Monday Microsoft announced "SQL Server Fast Track", a set of reference architectures for data warehousing with SQL Server. This has all been blogged very well by others, so if you're interested in finding out more I suggest you read Peter Koller: A couple of accompanying white papers have also been released, though, and I was reading this one: and also: So Analysis Services is clearly going to be supported as part of Madison somehow, as a 'node within a grid'. What does this mean exactly? I'm not really sure. The focus of the paper is the 'Hub and Spoke' architecture and how Madison will enable this through its ability to transfer large amounts of data quickly via 'high speed, parallel transfers' over its grid. The following DATAllegro white paper offers some more detail on this: 2009/2/23 SQL Server Conference in ItalyI'm doing some work with Marco Russo and Alberto Ferrari at the moment, and for the benefit of any Italian (or Italian-speaking) readers of this blog I thought I'd mention that they are involved in organising a SQL Server conference near Milan. You can find out more and register here: It looks like they've got a lot of good BI/Analysis Services content... 2009/2/16 Implementing Real Analysis Services DrillDown in a Reporting Services ReportSean Boon recently blogged about an approach to implement drilldown on charts with Reporting Services when Analysis Services is used as the data source, and it got me thinking about ways to implement drilldown in Reporting Services in general. There are two standard methods used to do this that are widely known about:
Wouldn't it be good to have drilldown capabilities in Reporting Services just like you have in any other Analysis Services client? That's to say, you'd see a list of members on rows in your report, you'd click on one and then see all its children, then click again and its children would disappear? Well, it is possible and it's a problem I've tackled numerous times myself. The last time was when I was writing the samples for Intelligencia Query, but I've just come up with an even better approach which I thought I'd blog about. I've implemented it for the standard Analysis Services data source although I'll be honest it took me a few goes to get it to work properly (there would have been much fewer hacky workarounds if I'd been using Intelligencia Query!) and I'm not sure it's 100% robust; hopefully someone will find this useful though. What I've done is basically a variation on the second approach above, but instead of using multiple reports I've created a single report which calls itself when you drill down on a member. The really tricky part is how you manage the set of members you've drilled up and down on, and this is where I'd struggled in the past - the solution I've got here uses a hidden parameter to manage that set, which is then passed to the main dataset and used with the DrillDownMember function. Here are the steps to get it working:
WITH What this does is take the set of previously drilled down members, and if the member we've just drilled down on is not in there return the set of all previously drilled down members plus the new member (for drilling down); if it is present, return the set of all previously drilled down members except the new member (for drilling up). If the member we've clicked on is a leaf member, we can ignore the click and just return the set of all previously drilled down members. WITH =Split(Join(Parameters!DrillDowns.Value, ","),",") Here's what you'd expect to see when you first run the report: Click on Australia and then South Australia and you get this: Click on Australia again and you'd go back to what's shown in the first screenshot. I realise these steps are pretty complex, so I've created a sample report in SSRS2008 format and uploaded it to my SkyDrive here: I dream of the day when SSRS will do all this stuff for me automatically... UPDATE: you can now view the sample report online (minus the indenting for members on different levels, for some reason) here - 2009/2/11 SQLBits IV Registration Open!Registration for SQLBits IV (the UK's - and perhaps the world's - largest free SQL Server tech conference), which will be taking place on March 28th in Manchester is now open: We've got four tracks of top-notch presentations including some very strong BI sessions. I'll be speaking, and among other speakers we've got SSIS-superstar Jamie 'two-blogs' Thomson for the first time. You can see the agenda here: I'm also doing a pre-conference seminar "Introduction to MDX": Songsmith and Data Audiolization for BIData audiolization is clearly a real subject that someone, somewhere is researching... and after the fad for data visualisation, why shouldn't we be thinking about how to represent data with sound? Anyway, I'll cut to the chase. This video has been doing the rounds on Facebook, it made me laugh and if I didn't have a hundred better things to be doing I'd be downloading a copy of Microsoft Songsmith right now and working out how to hook it up to Analysis Services: Adventure Works the musical, anyone? More on Oracle 11g and MDXFollowing on from reports last year that Simba Technologies had built a 2005-flavour OLEDB for OLAP provider for Oracle's OLAP option, here are some more details: 2009/2/6 PASS European Conference 2009 and Analysis Services MonitoringLast November, at the PASS Summit in Seattle, I presented a session on building a monitoring solution for Analysis Services, Integration Services and Reporting Services which seemed to go down pretty well. I was lucky in that the SQLCat team presented a very similar session, although just covering Analysis Services, the next day - so at least I got to present first! Anyway, I see that they've just got round to publishing their material on this subject here: Meanwhile, I'll be working on expanding my material (which was a bit rough-and-ready) into a full day pre-conference seminar which I'll be presenting with Allan Mitchell at the PASS European Conference, on April 22nd-24th in Neuss in Germany: Allan, being the SSIS expert, will be covering that side of things and rewriting my packages so they're rather more robust; that will allow me to concentrate on the SSAS/SSRS side of things, which I know better. We have a vague plan to release all of our code on Codeplex or somewhere similar; I know a lot of people are also interested in this area. With a bit of luck I'll also be speaking at the main conference, but I don't think the full agenda hasn't been decided yet. I had a good time there last year and hopefully I'll see some of you there this year too! 2009/2/4 Arbitrary-shaped sets and the Storage Engine cacheHere's a companion-piece to my post last week about query context and the formula engine cache - another scenario where you can easily stop caching taking place without knowing it, which has already been documented (although there is at least one important point to add) but again needs more visibility. This time the problem is that when you write an MDX query with an arbitrary-shaped set in the Where clause it stops Analysis Services using the storage engine cache. Queries that suffer from this will always read from disk and always perform as well or as badly as they did the first time they were run - so if cold cache performance is a problem for you, then this is an issue you need to understand and avoid. Rather than repeat the information, let me direct you to the blog entry where I first found out about this problem, on Thomas Keyser's blog from 2006: I can confirm that everything he says is still relevant on SSAS2008 except for the last query, where he has the whole of the Product.[Product Categories] hierarchy in the Where clause - run it twice and the second time you run it you'll see it does hit the storage engine cache. One other point I picked up on Mosha's MDX seminar in November is that it is possible for Analysis Services to think a set is arbitrary-shaped when it really isn't. Take the following query: SELECT [Measures].[Internet Sales Amount] ON 0, This does not have an arbitrary-shaped set in the Where clause, and as a result the second time you run it you'll see it hit the storage engine cache. However, if you rewrite the query so you have a set of tuples in the Where clause as follows: SELECT [Measures].[Internet Sales Amount] ON 0, Even though you might think this query is equivalent to the first one, you'll see that it does not use the storage engine cache. What can we do about this then? Not a lot with most client tools; I've not checked, but I'd be surprised if any of them generated their MDX to avoid this situation. If your users frequently use certain arbitrary-shaped sets the only thing you could maybe do is hack your dimension data to make them non-arbitrary - but that would almost certainly end up being a bad compromise; otherwise you'd just have to build aggregations to make cold cache queries fast. However, if you're using SSRS then of course you can rewrite the MDX yourself. Let's build a quick report on AdventureWorks that displays this problem: As you can see, I've got a multiselect parameter on the slicer that has a default selection of members from two different levels from [Product].[Product Categories] - an arbitrary shaped set. Here's the MDX that gets generated: SELECT And here's how I would rewrite it: SELECT What I've done here is:
|
|
|