none
一个SSAS的问题,关于Create Member作用在Dimension的User-Defined Hierarchy出现的问题! RRS feed

  • 问题

  • Dealer Region Dealer Subregion
    East  
      East 1
      East 2
      N/A
      Avg. East
    North  
      N/A
      North 1
      North 2
      Avg. North
    South  
    Avg. All Dealer  

    客户给我们的他们原来的CUBE,在Region和SubRegion这两个Level上分别都有Avg。 XXX的Member。

     

    所以,我在BI项目的Cube的Calculations中使用了

    CREATE MEMBER CURRENTCUBE.[Dealer].[Dealer By Region].[Eastern].[AAA]
     AS 1, 
    VISIBLE = 1;
    
    这个语句 。

    但是结果导致了Hierarchy中的Member都乱了。

    变成了

    Eastern

                Eastern 1

                Eastern 2

                AAA

                Northern 1

                Northern 2

                Southern 1

                Southern 2

    Northern

    Southern

    Northern和Southern下面什么都没了。

     

    牛人么,,,这个问题出在哪里?要怎么解决?

    Thanks!

    2011年5月7日 13:46

答案

  • Hi Gary,

    目前,Calculated member 不能解决你的问题. 要想实现"在Region和SubRegion这两个Level上分别都有Avg", 你可以在 data source view中, 利用named query 来为每个Level 加Avg member. 例如, 你的named query 输出的结果如下:

    Eastern  Eastern 1
    Eastern  Eastern 2
    Eastern  Avg.East
    North     North 1
    North     North 2
    North     Avg.North
    .
    .
    .

    我想使用T-SQL 拼成(union all)上面的表值结果不会太难. 那么使用上面的表值结果创建的dimension user hierarchy就会得到你想要的 结构, 在每个Leave上都有 AVG members, 只是这些Members对应的Measures 都是 null. 这时,需要在Calculation 中使用Scope 来给这些members's measure cell赋值. 例如,它们的脚本如下:

    --第一级别的Avg member的 Measure 赋值

    scope([Geography01].[Region-Countries].[Regions].&[Avg.AllRegion],[Measures].currentmember);
    this = avg([Geography01].[Region-Countries].[Regions].members,[Measures].currentmember);
    end scope;

    --其他的Avg members的 Measure 赋值


    scope([Geography01].[Region-Countries].[Countries].&[6],[Measures].currentmember);
    this = avg({descendants([Geography01].[Region-Countries].[Countries].&[6].parent) - [Geography01].[Region-Countries].[Countries].&[6]},[Measures].currentmember);
    end scope;

    谢谢
    Jerry

     

    • 已标记为答案 Gary Tian 2011年5月11日 8:34
    2011年5月11日 7:15

全部回复

  • 这个问题很纠结吗?

    还是我的描述有问题?

     

    2011年5月10日 16:29
  • Hi Gary,

    目前,Calculated member 不能解决你的问题. 要想实现"在Region和SubRegion这两个Level上分别都有Avg", 你可以在 data source view中, 利用named query 来为每个Level 加Avg member. 例如, 你的named query 输出的结果如下:

    Eastern  Eastern 1
    Eastern  Eastern 2
    Eastern  Avg.East
    North     North 1
    North     North 2
    North     Avg.North
    .
    .
    .

    我想使用T-SQL 拼成(union all)上面的表值结果不会太难. 那么使用上面的表值结果创建的dimension user hierarchy就会得到你想要的 结构, 在每个Leave上都有 AVG members, 只是这些Members对应的Measures 都是 null. 这时,需要在Calculation 中使用Scope 来给这些members's measure cell赋值. 例如,它们的脚本如下:

    --第一级别的Avg member的 Measure 赋值

    scope([Geography01].[Region-Countries].[Regions].&[Avg.AllRegion],[Measures].currentmember);
    this = avg([Geography01].[Region-Countries].[Regions].members,[Measures].currentmember);
    end scope;

    --其他的Avg members的 Measure 赋值


    scope([Geography01].[Region-Countries].[Countries].&[6],[Measures].currentmember);
    this = avg({descendants([Geography01].[Region-Countries].[Countries].&[6].parent) - [Geography01].[Region-Countries].[Countries].&[6]},[Measures].currentmember);
    end scope;

    谢谢
    Jerry

     

    • 已标记为答案 Gary Tian 2011年5月11日 8:34
    2011年5月11日 7:15
  • Hi, Jerry

     

     

    我也是后来发现,貌似在一个Hierarchy上,只能使用一次Create Member。

     

    我现在使用的是,直接在每个Dimension的表中,直接加了相应的记录,除了Region级的,那个,我用Create Member去加。

     

     不过你这个方法,我去试试,可能回避我的方法好呢☺,,呵呵。。。

     

    Thanks!

    2011年5月11日 8:33