DIMENSION_PROPERTIES

时间:2016-05-18 15:51:38

标签: ssas mdx

我正在做一些小测试尺寸和立方体的探索性工作。我希望最终完全理解SSAS的“维度属性”概念,我觉得这很难理解,尽管我已经使用SSAS多年而没有真正深入了解它。

但这个问题太广泛了。我现在的问题是:

我创建了一个Employee维度。键列是EID(int),Name列是Name(varchar)。好的,我的命名约定并不出色(但是在SSAS维度设计中,好的命名约定似乎非常困难,因为所有对象名称都暴露给用户)。

还有一个名为Salary的属性。

我在这里要做的是探索“维度叶级属性”的可能性。 SSAS使用它们并不是真正的“维度属性”,尽管实现它们的唯一方法是作为维度属性。我所说的“叶级属性”是一个不可聚合的“属性”,具有与叶级相同的基数(或者,无论如何,被视为具有相同的基数)。出于本练习的目的,我不想通过Salary进行聚合:我只是希望Salary可用作维度的每个叶级成员的属性。有点像Key Column和Name Column属性的扩展。

我熟悉这种显示成员属性的常用方法:

WITH MEMBER Measures.ESal AS Employee.EID.CurrentMember.Properties("Salary")
SELECT
Measures.ESal ON 0,
Employee.EID.EID.Members
ON 1
FROM $Employee

这很有效。为了证明我只是从叶级返回成员,这是结果集:

enter image description here

(非叶级别的成员属性可能没有值是有意义的 - 我已经读过,在这种情况下,MDX只是抛出错误而不是显示叶级成员的值而没有对于非叶子。)

但是尝试使用DIMENSION PROPERTIES会导致错误:

SELECT
{} ON 0,
Employee.EID.EID.Members
DIMENSION PROPERTIES Employee.Salary
ON 1
FROM $Employee

结果:查询(4,22)找不到[员工]。[工资]维度属性。

如果我将层次结构和级别放入,它可以工作(尽管SSMS实际上没有显示DIMENSION PROPERTIES中指定的任何内容;正如我已经听到的那样):

选择 {} ON 0, Employee.EID.EID.Members DIMENSION PROPERTIES Employee.EID.EID.Salary ON 1 来自$ Employee

结果:就像之前一样,但没有ESal列(显然)。

两个问题:

  1. 为什么Salary属性必须作为属性进行处理 维度/层次结构/级别Employee.EID.EID?当然这是一个 维度中的属性? (我找到了SSAS / SSDT的实现方式 多层次结构深陷困惑和混乱)
  2. 尺寸属性有什么意义?做其他客户 实际上显示它返回什么?如果是这样,那么它不是一场噩梦 测试这段代码?

0 个答案:

没有答案