如何使用另一个维度的值添加列?

时间:2013-04-03 19:03:34

标签: ssas mdx mondrian

如果标题没有意义,我会道歉。我正在尝试做一些可能很简单的事情,但我无法弄明白,而且我不确定如何寻找答案。我有以下MDX查询:

SELECT
  event_count ON 0,
  TOPCOUNT(name.children, 10, event_count) ON 1
FROM
  events

返回如下内容:

|               | event_count |
+---------------+-------------+
| P Davis       |         123 |
| J Davis       |         123 |
| A Brown       |         120 |
| K Thompson    |         119 |
| R White       |         119 |
| M Wilson      |         118 |
| D Harris      |         118 |
| R Thompson    |         116 |
| Z Williams    |         115 |
| X Smith       |         114 |

我需要添加一个额外的列(gender)。性别不是衡量标准。这只是数据的另一个方面。例如,请考虑以下查询:

SELECT
  gender.children ON 0,
  TOPCOUNT(name.children, 10, event_count) ON 1
FROM
  events

但这不是我想要的! :(

|              | female | male | unknown |
+--------------+--------+------+---------+
| P Davis      |        |      |     123 |
| J Davis      |        |  123 |         |
| A Brown      |        |  120 |         |
| K Thompson   |        |  119 |         |
| R White      |    119 |      |         |
| M Wilson     |        |      |     118 |
| D Harris     |        |      |     118 |
| R Thompson   |        |      |     116 |
| Z Williams   |        |      |     115 |
| X Smith      |        |      |     114 |

很好的尝试,但我只想要三列:nameevent_countgender。这有多难?

显然,这反映了我对MDX缺乏了解。任何指向优质介绍材料的内容都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

重要的是要理解在MDX中,您在每个轴上构建 sets 成员,而不是像表格行集一样指定列名。您正在描述结果的二维网格,而不是线性行集。如果将每个维度设想为表,则成员集是该表中单个列的唯一值集。

当您选择Measure作为成员时(如第一个示例中所示),它看起来好像是从表中选择,因此很容易误解。选择Dimension时,会得到许多成员,以及行和列之间的交叉连接(在这种情况下是稀疏的,因为名称和性别是1对1)。

因此,您可以在单个轴上交叉连接这两个维度,然后过滤掉空单元格:

SELECT
  event_count ON 0,
  TOPCOUNT(
    NonEmptyCrossJoin(name.children, gender.children), 
    10, 
    event_count) ON 1
FROM
  events

哪个应该为您提供具有单个列(event_count)和10行的结果,其中每一行由元组(名称,性别)组成。

我希望这会让你走上正确的道路,请随时问你是否要我澄清。

对于一般介绍性材料,我认为“MDX解决方案”这本书是一个很好的起点: http://www.amazon.ca/MDX-Solutions-Microsoft-Analysis-Services/dp/0471748080/

答案 1 :(得分:2)

对于在线MDX介绍材料,您可以查看显示主要MDX​​概念的gentle introduction