dbTalk Databases Forums  

Dimension interval

microsoft.public.sqlserver.olap microsoft.public.sqlserver.olap


Discuss Dimension interval in the microsoft.public.sqlserver.olap forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Botinha
 
Posts: n/a

Default Dimension interval - 01-20-2004 , 06:17 AM






Hello!
Here is the situation:
I want to make a dimension with
intervals.Example:0-100;101-1000;<1000.But this intervals could
change!
Now i am doing it with a table with that intervals, but this is not
flexible!
Is there any possible way of doing this more flexible? Grouping the
values in the cube?

Thanks in advance

Andre Fonseca

Reply With Quote
  #2  
Old   
Deepak Puri
 
Posts: n/a

Default Re: Dimension interval - 01-20-2004 , 06:55 PM






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
Quote:
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:

-----------------------------------------------
Quote:
City Count | Unit Sales |
-----------------------------------------------
2117:15271 | 4 | 18,048.00 |
15271:28425 | 7 | 171,888.00 |
28425:41580 | 2 | 76,837.00 |
-----------------------------------------------

Quote:
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
Quote:



- Deepak

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!


Reply With Quote
  #3  
Old   
Botinha
 
Posts: n/a

Default Re: Dimension interval - 01-21-2004 , 07:51 AM



Thanks Deepak Puri!
But want i want is to build a dimension in the cube, not by mdx query!
There are any way of doing that?
i.e.Create a dimension with the range of a measure that exists in the
fact table. ex:
dim name: Range Measure cost
dim level 1: strName ("1-100";"101-1000"; "> 1001")
dim level 2: intValue (5,10,11,100)

I need this because today i want this ranges but in the next month i
will need anothers like "1-10000";"10001-100000"; "> 100001"!!!
Is there any way of doing this in a flexible approach?

Deepak Puri <deepak_puri (AT) progressive (DOT) com> wrote

Quote:
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!

Reply With Quote
  #4  
Old   
Deepak Puri
 
Posts: n/a

Default Re: Dimension interval - 01-21-2004 , 11:34 AM



You should be able to create/update dimensions programmatically using
Decision Support Objects (DSO). Maybe someone on this group can give you
specific ideas?

- Deepak

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.