![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
#3
| |||
| |||
|
#4
| |||
| |||
|
#5
| |||
| |||
|
#6
| |||
| |||
|
| WITH MEMBER [Store].[Name] AS |
#7
| |||
| |||
|
#8
| |||
| |||
|
| CREATE MEMBER CURRENTCUBE.[MEASURES].[OrderedRows] AS |
#9
| |||
| |||
|
|
Hi Alan, In order to create a server-side [MEASURES].[Rank Desc], I replaced the Named Set: [OrderedRows] by a calculated measure: [Measures].[OrderedRows], which is a string version of the set (the Named Set won't work because it refers to members of the query Axes). This is like the approach adopted in the entry cited from Chris Webb's blog. Unfortunately, the Adventure Works query timing doesn't look promising - over 80 seconds. Anyway, below are the server-side definitions, in case they work better in your scenario (which might be the case, if your set is large). Can't conceive a better solution at the moment; but I'll post a query at Chris's blog, in case he has any ideas. CREATE MEMBER CURRENTCUBE.[MEASURES].[OrderedRows] AS iif(StrToSet("Axis(1)").Item(0).Item(0).Dimension. CurrentMember is StrToSet("Axis(1)").Item(0).Item(0), SetToStr(Order(Extract(StrToSet("Axis(1)"), StrToSet("Axis(1)").Item(0).Item(StrToSet("Axis(1) ").Item(0).Count -1).Dimension), StrToSet("Axis(0)").Item(0).Item(StrToSet("Axis(0) ").Item(0).Count -1), BDESC)), (StrToSet("Axis(1)").Item(0).Item(0), [MEASURES].[OrderedRows])); Create Member CurrentCube.[MEASURES].[Rank Desc] AS -- IF GRAND TOTAL THEN NULL IIF(StrToSet("Axis(1)").Item(0).Item(0).Dimension. CurrentMember.Level IS StrToSet("Axis(1)").Item(0).Item(0).Dimension.Defa ultMember.Level, NULL, -- MEASURE IS LAST ITEM ON COLUMN AXIS - IF EMPTY THEN NULL IIF(IsEmpty(StrToSet("Axis(0)").Item(0).Item(StrTo Set("Axis(0)").Item(0) .Count -1)), NULL, -- Member is first in [OrderedRows] IIF(Rank({StrToSet("Axis(1)").Item(0).Item(StrToSe t("Axis(1)").Item(0).C ount -1).Dimension.CurrentMember as OrderDimCur}.Item(0), StrToSet(CStr([MEASURES].[OrderedRows]))) < 2, 1, -- DIMENSION IS LAST ITEM ON ROW AXIS, value tie IIF(StrToSet("Axis(0)").Item(0).Item(StrToSet("Axi s(0)").Item(0).Count -1) = (StrToSet("Axis(0)").Item(0).Item(StrToSet("Axis(0 )").Item(0).Count -1), StrToSet(CStr([MEASURES].[OrderedRows])).Item(Rank(OrderDimCur.Item(0).I tem(0), StrToSet(CStr([MEASURES].[OrderedRows])))-2).Item(0)), ([MEASURES].[Rank Desc], StrToSet(CStr([MEASURES].[OrderedRows])).Item(Rank(OrderDimCur.Item(0).I tem(0), StrToSet(CStr([MEASURES].[OrderedRows])))-2)), -- Default case of ranking Rank(OrderDimCur.Item(0).Item(0), StrToSet(CStr([MEASURES].[OrderedRows]))))))); - Deepak Deepak Puri Microsoft MVP - SQL Server *** Sent via Developersdex http://www.developersdex.com *** |
#10
| |||
| |||
|
![]() |
| Thread Tools | |
| Display Modes | |
| |