我昨天做了我的第一个立方体。我对此还很陌生,所以请原谅任何术语的误用。我的维度之一,让我们称之为MyDimension1层次结构,让我们称之为MyHierarchy,有两个级别,让我们称之为Level1和Level2。
我似乎能够做类似的事情:
SELECT
{ [Measures].[Whatever] } ON 0,
{ ([MyDimension1].[Level1].[Level1], [MyDimension1].[Level2].[Level2]) } ON 1
FROM MyCube
Run Code Online (Sandbox Code Playgroud)
这给了我我想要的结果。如果我理解正确的话,定义轴 1 的集合包含一个具有两个组件的元组(?)。我读过元组的每个组件(?)应该来自不同的维度,但我似乎能够指定相同维度的组件,如上面的查询所示。不过,我希望能够仅按名称指定层次结构,然后让服务器为我创建元组。所以像这样:
SELECT
{ [Measures].[Whatever] } ON 0,
{ AllLevelsToTuple([MyDimension1].[MyHierarchy]) } ON 1
FROM MyCube
Run Code Online (Sandbox Code Playgroud)
但我似乎不知道如何做到这一点。提前致谢!
编辑(我的例子,根据回答者的要求):
这在功能上实现了我想要的,但不是我想要的语法:
SELECT [Measures].[Original] ON 0,
([Customer].[Customer].[Customer], [Customer].[Account ID].[Account ID]) ON 1
Run Code Online (Sandbox Code Playgroud)
结果(在 SSMS 中):
Original
--------- -- --------
CustomerA 15 306.03
CustomerA 16 754.20
...
CustomerB 17 524.43
...
CustomerC 22 760.42
...
Run Code Online (Sandbox Code Playgroud)
当我扩大维度时,它看起来像:
- Customer
- Hierarchy
+ Members
+ Customer
+ Account ID
Run Code Online (Sandbox Code Playgroud)
当我做类似的事情时(我想做语法上类似的事情):
SELECT [Measures].[Original] ON 0,
([Customer].[Hierarchy].Members) ON 1
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
Original
---------- --------
All 17638.15
CustomerA 2624.76
15
16
...
CustomerB 3113.67
17 524.43
...
CustomerC 3427.01
22 760.42
...
Run Code Online (Sandbox Code Playgroud)
基本上我希望有 3 列,而不是 2 列。
您可能想阅读这篇MDX 温和的介绍。
我读过元组的每个组件(?)应该来自不同的维度
来自不同的层次结构。在AS中,我猜想对于每个级别,都有一个相应的扁平层次结构;因此,下面看起来您正在访问两个不同层次结构的级别:
{ ([MyDimension1].[Level1].[Level1], [MyDimension1].[Level2].[Level2]) } ON 1
Run Code Online (Sandbox Code Playgroud)
我不是 AS 专家,但我猜想以下说法:
SELECT [Measures].[Original] ON 0,
([Customer].[Customer].[Customer], [Customer].[Account ID].[Account ID]) ON 1
Run Code Online (Sandbox Code Playgroud)
实际上被解释为来自 2 个不同层次结构的级别成员的交叉连接;() 符号更有可能被解释为 () 运算符而不是元组符号,然后 {},{} 是 MDX 中的交叉连接:
SELECT [Measures].[Original] ON 0,
[Customer].[Customer].[Customer].members * [Customer].[Account ID].[Account ID].members ON 1
Run Code Online (Sandbox Code Playgroud)
因此,结果中测量值前面的两列。
基本上我希望有 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
Run Code Online (Sandbox Code Playgroud)