【发布时间】:2012-03-01 14:00:35
【问题描述】:
MDX 中的tuple 和set 有什么区别。我们如何区分两者以及何时使用它们。
【问题讨论】:
-
@Guts..你能用简单的方式解释一下吗..?
MDX 中的tuple 和set 有什么区别。我们如何区分两者以及何时使用它们。
【问题讨论】:
从更数学的角度来到 MDX,这是我对这个问题的看法:
假设您有一个尺寸为 X、Y 和 Z 的 3d 立方体。 立方体中的单元数是 X 中的成员数乘以 Y 中的成员数乘以成员数Z 的。
每个单元格在立方体中都有一个基于 X、Y 和 Z 值的坐标。该坐标是一个元组。
让我们说:
那么一个单元格可能是 1999 年的笔记本电脑销量。单元格坐标将是:
逻辑上 (X, Y, Z) 和物理上这是一个元组,例如
(Measures.Sales, Years.[1999], Products.[Laptop])
现在假设我们需要多个单元格,那么我们需要多个元组,对吗?是的,一个 Set 基本上是多个元组。实际上,我包括 0 和 1 的倍数。因此,扩展我们的示例,我们可以拥有 1999 年的笔记本电脑和 2001 年的台式机:
{
(Measures.Sales, Years.[1999], Products.[Laptop]) ,
(Measures.Sales, Years.[2001], Products.[Desktop])
}
所以你可以看到你最终得到了一个集合的多个项目,以及一个元组的单个项目......
【讨论】:
元组是取自所有维度的单个层次结构成员。
假设Time.[2nd half] 是一个时间维度的元组。同样,我们可以有多个元组,我们用'(',')'括号来表示它们。
例如:
(Time.[2nd half], Color.Dark.Red).
这不过是节点的数学交集。我们可以将数学中的节点表示为 (2,1),就像上面的表达式一样。
现在来集合它只不过是元组的组合。 set 包含一个或多个元组,它也可能为零。我们用 { , } 大括号表示它们。 例如:
{ (Time.[1st half], Color.Dark.Red), (Time.[2nd half], Color.Dark.Blue) }
【讨论】:
This article 详细描述了术语Member、Tuple和Set。
我会尽量用简单的方式解释一下。
简单地说,tuple 是维度中数据的原子切片,set 是元组的集合。例如,您可以有一个带有元组Sherlock Holmes、Tom Sawyer、CLR via C#、Code Complete 和Quantum Physics for Dummies 的Books 维度。
之后,您可以将这些元组组织成命名集,例如 Programming、Fiction 和 Natural Sciences。
[Books].&[Sherlock Holmes] -- Tuple
[Books].&[CLR via C#] -- Tuple
{ [Books].&[CLR via C#], [Books].&[Code Complete] } -- Set
MDX 中有某些functions 返回集合或元组,知道如何将元组转换为集合通常很有帮助,反之亦然。例如,Item(...) 函数从集合中获取特定的元组。在{ , , } 中包含多个元组将创建一个包含这些元组的集合。
我描述的例子很片面,并没有涵盖整个理论,但它可能会让您对这些概念的工作原理有一个很好的基本了解。
【讨论】:
[Books].&[Sherlock Holmes] 是一个元组有点误导,因为它忽略了所有其他维度同时需要一个坐标的事实。另外,() 在解释元组时在 MDX 中的使用很重要。
这是来自http://www.onlineexpert.com/elearning/user/pdf/APPLICATIONDEVELOPMENT/SQL2KOLAP/Ch08.pdf 的另一个很好的解释。
这类似于 Preet Sangha 的回答。
【讨论】: