![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| ||||
| ||||
|
| From: Deepak Puri (deepak_puri (AT) progressive (DOT) com) |
|
City Count | Unit Sales | ----------------------------------------------- |
| WITH |
| |
#3
| |||
| |||
|
|
One (limited) way of creating dynamic dimension intervals is by using CreatPropertySet(). See this earlier post: http://groups.google.com/groups?hl=e...8&selm=eup0nzk dDHA.2672%40tk2msftngp13.phx.gbl From: Deepak Puri (deepak_puri (AT) progressive (DOT) com) Subject: Re: value ranges based on some measure/metric View: Complete Thread (6 articles) Original Format Newsgroups: microsoft.public.sqlserver.olap Date: 2003-09-08 14:07:43 PST I think that I now have an (inelegant) solution, using the CreatePropertySet() function. Hopefully, someone can post a prettier approach. But till then, here is an MDX query for the Foodmart Sales cube. Measures.BinCount is a place-holder for the desired number of "bins" or ranges (say, 3 here). The Unit Sales by City are grouped into 3 dynamic ranges, so the output in the MDX Sample App looks like: ----------------------------------------------- | City Count | Unit Sales | ----------------------------------------------- 2117:15271 | 4 | 18,048.00 | 15271:28425 | 7 | 171,888.00 | 28425:41580 | 2 | 76,837.00 | ----------------------------------------------- WITH Member Measures.BinCount as '3' Set StoreCities as 'NonEmptyCrossJoin([Store].[Store City].Members)' Set MinSales as 'Head(Order(StoreCities,[Measures].[Unit Sales],BASC))' Set MaxSales as 'Head(Order(StoreCities,[Measures].[Unit Sales],BDESC))' Member Measures.BinIndex as 'Int(iif([Store].CurrentMember is MaxSales.Item(0), Measures.BinCount-1, (((Measures.[Unit Sales],Store.CurrentMember)-(Measures.[Unit Sales],MinSales.Item(0))) *Measures.BinCount) /((Measures.[Unit Sales],MaxSales.Item(0))-(Measures.[Unit Sales],MinSales.Item(0)))))' Member Measures.BinLoVal as 'Int((((Measures.[Unit Sales],MaxSales.Item(0))*Measures.BinIndex) +((Measures.[Unit Sales],MinSales.Item(0))*(Measures.BinCount-Measures.BinIndex))) /Measures.BinCount)' Member Measures.BinHiVal as 'Int((((Measures.[Unit Sales],MaxSales.Item(0))*(Measures.BinIndex+1)) +((Measures.[Unit Sales],MinSales.Item(0))*(Measures.BinCount-Measures.BinIndex-1))) /Measures.BinCount)' Set CitySales AS 'CreatePropertySet([Store], StoreCities, CStr(Measures.BinLoVal)+":"+CStr(Measures.BinHiVal ))' Member [Measures].[City Count] as 'Generate({[Store].CurrentMember} as S, Filter(StoreCities,CStr(Measures.BinLoVal)+":"+CSt r(Measures.BinHiVal) = S.Item(0).Item(0).Name)).Count' Select {[Measures].[City Count],[Measures].[Unit Sales]} on Columns, Order(CitySales,Int(Mid(Store.CurrentMember.Name,1 ,InStr(Store.CurrentMe mber.Name,":")-1))) on Rows from Sales - Deepak *** Sent via Developersdex http://www.developersdex.com *** Don't just participate in USENET...get rewarded for it! |
#4
| |||
| |||
|
![]() |
| Thread Tools | |
| Display Modes | |
| |