Is it possible to use filter on an aggregated measure without bringing the server to its knees ?
I've got a 2005 UDM with a single fact table:
-accidentID
-accidentTypeID
-statusID
-countryID
-areaID
-operationID
-consequenceID
-lightConditionsID
...(18 more FKs to simple dimensions)
-Exits (always = 1 to indicate existens)
In addition, I've added a calulation to the cube
-NumberOfAccidents = DistinctCount of all records with -accidentTypeID = A
On top of this, I've generated a Report Model.
Building reports using Report Builder is a breeze, but if I set a filter on the NumberOfAccidents (the aggregated measure); Analysis Services goes off and never returns.
For instance, a matrix report with Country on one axis and Operation on the other and NumberOfAccidents as the only member will run as expected and quite fast.
However, if I set a filter on NumberOfAccidents to > 10, I'm lost. This query will basically run forever and completely halt Analysis Services.
The fact table contains approximately 270000 records.
Any insight ?
Trond
Sorry for the delay in replying.
Firstly, I suspect that the filter you are actually applying is not the one you expect. It will be filtering all of the rows in the fact table according to the criteria, before grouping by Country & Operation. Given that I don’t think NumberOfAccidents can be >1 for a fact row, I imagine that you intended to filter the results after grouping (which I don’t believe is possible in Report Builder, in a matrix).
Without knowing the details of the calculation, I can't say for sure why performance is so poor. I believe that it would be because the calculation is being evaluated for all combinations of the dimensions related to the measure group. There are two ways to make this much more efficient:
1. Make sure that NON_EMPTY_BEHAVIOR is defined for the calculation. This is a property of a calculated measure (say MC), and states which other measure (say M) where if M is Null, then MC is certainly Null. So if there is some simple Count measure on this measure group, then setting NON_EMPTY_BEHAVIOR to that Count measure, on NumberOfAccidents, should greatly improve
or
2.If this measure is simply a count of records where Accident type = A, then I would suggest simply having a new (non-calculated) measure based on that condition. So in the DSV, add a calculated column that is 1 if Type = A and 0 otherwise. Then have a regular measure built off that column
No comments:
Post a Comment