The fact table for the standard Foodmart Sales cube seems to similar to
your transaction table, if each sale is considered a transaction. It has
a time dimension down to the month and a customer dimension. The store
dimension can be treated like your country dimension. The relevant Sales
cube measure is [Sales Count], which is a count measure.
Based on these similarities, here is a sample MDX query for Foodmart
Sales that creates calculated measures like [AvgLifetime] and
[AvgFrequency], where the duration is the gap in months between earliest
and latest sales. You can compare query results to underlying fact table
rows:
Quote:
|
With Member [Measures].[Duration] as
|
'Rank(Tail(NonEmptyCrossJoin(
Descendants([Time].CurrentMember, [Time].[Month]),
{Customers.CurrentMember},
{Store.CurrentMember}, 1)).Item(0),
[Time].[Month].Members)
- Rank(NonEmptyCrossJoin(
Descendants([Time].CurrentMember, [Time].[Month]),
{Customers.CurrentMember},
{Store.CurrentMember}, 1).Item(0),
[Time].[Month].Members)'
Member [Measures].[Frequency] as
'Sum(NonEmptyCrossJoin(
Descendants([Time].CurrentMember, [Time].[Month]),
{Customers.CurrentMember},
{Store.CurrentMember}, 1), [Measures].[Sales Count])'
Member [Measures].[AvgLifetime] as
'Avg(Descendants([Customers].CurrentMember,
[Customers].[Name]), [Measures].[Duration])'
Member [Measures].[AvgFrequency] as
'Avg(Descendants([Customers].CurrentMember,
[Customers].[Name]), [Measures].[Frequency])'
Select {[Measures].[AvgLifetime],
[Measures].[AvgFrequency]} on columns,
NON EMPTY {Descendants(
[Customers].[All Customers].[USA].[OR].[Beaverton],
[Customers].[Name]),
[Customers].[All Customers].[USA].[OR].[Beaverton]} on rows
from Sales
where ([Store].[All Stores].[USA].[OR].[Portland],
[Time].[1997])
- Deepak
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!