MDX:平均使用

时间:2011-05-30 11:55:38

标签: mdx average

我达到了关于问题的基本MDX知识的极限,如果有人有想法,欢迎每一个帮助

场合

这是我想要处理的层次结构。在我的fact_table中,我有[测量]。[销售]测量。

[All Management].[TemplateMgt].[CityMgt].[DistricMgt].[StoreMgt]

[All Management].[TMP-00.002].[London].[DistricMgt].[Shoe001]
[All Management].[TMP-00.002].[London].[DistricMgt].[Hat001]
[All Management].[TMP-00.002].[London].[DistricMgt].[Electronic001]
[All Management].[TMP-00.002].[Paris].[DistricMgt].[Shoe001]
[All Management].[TMP-00.002].[Paris].[DistricMgt].[Hat001]
[All Management].[TMP-00.002].[Paris].[DistricMgt].[Electronic001]
[All Management].[TMP-00.002].[Madrid].[DistricMgt].[Shoe001]
[All Management].[TMP-00.002].[Madrid].[DistricMgt].[Hat001]
[All Management].[TMP-00.002].[Madrid].[DistricMgt].[Electronic001]

问题

对于给定的CityMgt,我希望有三个值

[测量]。[Cur]: StoreMgt给定CityMgt的销售额(因此对于马德里,获得价值[Shoe001],[Hat001],[Electronic001])

[测量]。[平均]: StoreMgt的平均销售额由StoreMgt拥有相同的TemplateMgt AVG([伦敦]。[Shoe001] + [巴黎]。[Shoe001] + [马德里] ] [Shoe001])

[测量]。[最大]: StroreMgt的最大销售价值具有相同的TemplateMgt MAX([伦敦]。[Shoe001],[巴黎]。[Shoe001],[马德里]。 [Shoe001])

换句话说,我想要一个具有这种结构的输出

  Shoe001    |  Hat001     |  Electronic001
 ----------------------------------------------------
 CUR|AVG|MAX | CUR|AVG|MAX  | CUR|AVG|MAX
 ----------------------------------------------------

到目前为止我得到了什么

WITH  MEMBER [Measures].[Cur] AS (...)
          MEMBER [Measures].[Avg] AS (...)
          MEMBER [Measures].[Max] AS (...)

SELECT {[Measures].[Cur], [Measures].[Avg], [Measures].[Max]} ON COLUMNS,
{FILTER({DESCENDANTS([All Management].CurrentMember, [StoreMgt])}, [All Management].Parent.Parent = "Madrid" } ON ROWS
from [MyCube]

我的问题是我不知道在会员属性Cur / Avg / Max中放入什么,所以我的数据可以按StoreMgt(一种groupby)处理

如果有人能够参与,我将不胜感激。

亲切,

2 个答案:

答案 0 :(得分:0)

要获得平均值,您可以定义新的层次结构(如果您使用SSAS,则为属性)。一个用于国家,另一个用于产品类型。一旦得到它们,统计计算就是与当前成员和[全部]一起玩的问题。

您可以使用其他版本 - > SUM(FILTER(..成员,条件),值)......这可能很慢,非常慢。

通常,对于这种计算,您可以使用我们称之为统计或实用维度(see)。

答案 1 :(得分:0)

我不完全确定以下查询是否有效,希望它能传达这个想法,

WITH MEMBER [All Management].[Sales_AVG] AS AVG({[All Management].Members},                           
                                                       [Measures].currentMember)
     MEMBER [All Management].[Sales_MAX] AS MAX({[All Management].Members},        
                                                        [Measure].currentMember)
SELECT {[Measures].[Sales]} ON COLUMNS,
       {[All Management].Members, [All Management].[Sales_AVG], 
         [All Management].[sales_Max]} ON ROWS FROM [MYCUBE] WHERE
       {DESCENDANTS([All Management].CurrentMember, [StoreMgt])}