1

我昨天做了我的第一个立方体。我还是新手,所以请原谅任何术语的滥用。我的一个维度,我们称它MyDimension1有一个层次结构,我们称它为MyHierarchy,有两个级别,我们称它们为Level1Level2

我似乎能够做类似的事情:

SELECT 
{ [Measures].[Whatever] } ON 0,
{ ([MyDimension1].[Level1].[Level1], [MyDimension1].[Level2].[Level2]) } ON 1
FROM MyCube

这给了我想要的结果。如果我理解正确,定义轴 1 的集合包含一个包含两个组件的元组(?)。我读过元组的每个组件(?)都应该来自不同的维度,但我似乎能够指定相同维度的组件,如上述查询所示。不过,我希望能够只按名称指定层次结构,然后让服务器为我创建元组。所以像:

SELECT 
{ [Measures].[Whatever] } ON 0,
{ AllLevelsToTuple([MyDimension1].[MyHierarchy]) } ON 1
FROM MyCube

但我似乎无法弄清楚如何做到这一点。提前致谢!

编辑(我的例子,应回答者的要求):

这在功能上做了我想要的,但不是我想要的语法:

SELECT [Measures].[Original] ON 0,
([Customer].[Customer].[Customer], [Customer].[Account ID].[Account ID]) ON 1

结果(在 SSMS 中):

               Original
---------  --  --------
CustomerA  15    306.03
CustomerA  16    754.20
...
CustomerB  17    524.43
...
CustomerC  22    760.42
...

当我扩展维度时,它看起来像:

- Customer
    - Hierarchy
        + Members
        + Customer
        + Account ID

当我做类似的事情时(我想在语法上做类似的事情):

SELECT [Measures].[Original] ON 0,
([Customer].[Hierarchy].Members) ON 1

我得到以下结果:

            Original
----------  --------
All         17638.15
CustomerA    2624.76
15
16
...
CustomerB    3113.67
17            524.43
...
CustomerC    3427.01
22            760.42
...

我希望有 3 列,而不是 2,基本上。

4

2 回答 2

4

您可能想阅读这个MDX 温和的介绍

我读过元组的每个组件(?)都应该来自不同的维度

相反,来自不同的层次结构。在 AS 中,我猜对于每个级别,您都有相应的平面层次结构;所以下面看起来你正在访问两个不同层次结构的级别:

{ ([MyDimension1].[Level1].[Level1], [MyDimension1].[Level2].[Level2]) } ON 1

我不是 AS 的专家,但我猜是以下陈述:

SELECT [Measures].[Original] ON 0,
([Customer].[Customer].[Customer], [Customer].[Account ID].[Account ID]) ON 1

实际上被解释为来自 2 个不同层次结构的级别成员的交叉连接;() 符号更有可能被解释为 () 运算符而不是元组符号,然后 {},{} 是 MDX 中的交叉连接:

SELECT [Measures].[Original] ON 0,
[Customer].[Customer].[Customer].members * [Customer].[Account ID].[Account ID].members ON 1

因此,结果中度量值前面的两列。

我希望有 3 列,而不是 2,基本上。

您需要使用计算的度量;就像是 :

with 
MEMBER Measures.HN as [Customer].Currentmember.Hierarchy.Name 
MEMBER Measures.LN as [Customer].Currentmember.Level.Name 
MEMBER Measures.MN as [Customer].Currentmember.Name 

SELECT { Measures.HN, Measures.LN, Measures.MN, [Measures].[Original] } ON 0,
([Customer].[Hierarchy].Members) ON 1
于 2012-05-24T00:31:34.290 回答
1

是的,您可以从不同的维度创建元组,您可以通过将成员放在括号之间并用逗号分隔来实现。

但是在这种情况下,你不需要一个元组,只需要一个集合。集合包含来自单个维度的成员,以逗号分隔并放置在大括号之间:{}。

看看后代函数。您可以使用此功能从您的层次结构中创建一个集合。

于 2012-05-23T17:04:44.600 回答