如果标题没有意义,我会道歉。我正在尝试做一些可能很简单的事情,但我无法弄明白,而且我不确定如何寻找答案。我有以下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 |
很好的尝试,但我只想要三列:name
,event_count
和gender
。这有多难?
显然,这反映了我对MDX缺乏了解。任何指向优质介绍材料的内容都将受到赞赏。
答案 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。