为啥维度取决于MDX中的属性

Posted

技术标签:

【中文标题】为啥维度取决于MDX中的属性【英文标题】:Why does dimensionality depend on the attribute in MDX为什么维度取决于MDX中的属性 【发布时间】:2020-11-30 06:14:46 【问题描述】:

对于我的生活,我无法弄清楚为什么 MDX 在维度而不是键上定义每个属性的维度。也许我在这里误解了一些东西,但如果我理解正确的话,这似乎是一种非常奇怪的方式。假设我有以下数据:

Person

ID(密钥) 姓名 年龄

我有一些这样的数据:[('Tom123', 'Tom', 15), ('Brad456', 'Brad', 16)

现在,为什么我可以通过以下两种方式选择两个用户:

Person.Name.Tom, Person.Name.Brad

或者:

Person.ID.Tom123, Person.ID.Brad456

但不是以下方式:

Person.Name.Tom, Person.ID.Brad456

然而,所有三种方式都使用相同的“维度”甚至“维度”,因为所有三种方式唯一地处理相同的两个Person 实体!

这对我来说似乎很奇怪,因为它们都使用相同的“维度”和“维度”,并且应该能够使用该维度的键,而不是认为每个属性都是唯一的。为什么会这样?或者,我是不是误会了什么。

如果我们使用这张图片:

如果我们通过执行Product.TV, Geography.Asia, Time.Q1 或执行Product.TV, Geography.Asia, Time.Quarter One 来处理单个多维数据集(元组),这有什么关系。它们只是做完全相同事情的两种方式,但 MDX 认为它们具有不同的维度 (?)。

【问题讨论】:

【参考方案1】:

这是一个非常好的问题。

然而,所有三个都使用相同的“维度”甚至“维度”,因为 所有三种方式都唯一地寻址相同的两个 Person 实体!

这对我来说似乎很奇怪,因为它们都使用相同的 'dimension' 和 'dimensionality' 并且应该能够使用 Key for 这个维度而不是认为每个属性都是唯一的。为什么是 这样吗?或者,我是不是误会了什么。

因此,对于任何语言,语法都会先于其他任何内容进行检查。您所指的案例是唯一可以忽略维度的实例。但是语言首先评估数据是不明智的(就 SSAS 和 MDX 而言,它称为 AttributeID)。其次,这将使用户更加困惑。以你的例子为基础

Person.Name.Tom, Person.ID.Brad456

让我们在纽约有 100 人,所以按照你的逻辑,下面是 该集合将是 Person.City.Newyork,然后 MDX 将替换所有 100 个 ID。这将阻止 MDX 使用聚合,这是 CUBE 的最大优势。大多数发送到多维数据集的查询都是针对汇总数据的。 MDX 中的大多数查询需要整个 NEWYORK 的数据,而不是 NEWYORK 中的一个人

总而言之,编译时间会增加,聚合将无法使用。

【讨论】:

以上是关于为啥维度取决于MDX中的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MDX 中基于维度属性定义计算度量?

维度成员作为 MDX 中的计算度量

如何根据 mdx 中的另一个维度层次结构过滤维度层次结构

Mondrian MDX 中的最后日期和时间

具有多个属性层次结构的计算成员 - MDX

事实和维度表之间的 MDX 查询