0

如果标题没有意义,我深表歉意。我正在尝试做一些可能很简单的事情,但我无法弄清楚,我不确定如何寻找答案。我有以下 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 缺乏了解。任何指向质量介绍材料的指针将不胜感激。

4

2 回答 2

3

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

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

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

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/

于 2013-04-03T20:48:48.223 回答
2

对于在线 MDX 介绍材料,您可以查看这个介绍主要 MDX 概念的温和介绍。

于 2013-04-04T06:52:07.973 回答