处理MDX查询的逻辑顺序

时间:2014-10-29 22:38:12

标签: ssas mdx olap

MDX脚本中子句的评估顺序是什么?

WITH 
  MEMBER measures.A AS ...
  MEMBER measures.B AS ...
  SET S1 AS ...
SELECT 
  {
    measures.A
   ,measures.B
   ,measures.x
  } ON COLUMNS
  {S1} HAVING <condition> on ROWS
FROM [Cube]
WHERE ({S2})
  1. FROM
  2. WHERE
  3. WITH
  4. SELECT
  5. HAVING
  6. 但也许不是那么简单,因为MEMBERSET在上下文方面的处理方式不同 - 所以如果这个顺序是正确的,那么上下文如何结合?

1 个答案:

答案 0 :(得分:5)

我会说:

  1. FROM(包括潜在的子选择)
  2. WHERE
  3. WITH子句中的SET和MEMBER位置
  4. 并行构建所有查询轴(列,行,...)的元组列表,忽略NON EMPTY和HAVING
  5. 所有轴交点的单元格值
  6. 按照NON EMPTY的要求从轴移除元组并为每个轴移除HAVING。
  7. 通过&#34;会员位置&#34;在第3步中,我指的是成员存在的信息,以及层次结构中可能位于哪个层次结构中的信息。这不涉及成员定义表达式。这将在步骤5和6中进行评估。但步骤4需要该位置。

    轴的并行评估意味着查询处理中的轴之间没有关系。

    另请注意,这是概念视图。在物理上,步骤6可能发生在步骤4的处理期间,或者优化器决定的是正确的执行顺序,只要结果是相同的。