2013-04-03 5 views
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 | 

Хорошая попытка, но я просто хочу три колонки:. name, event_count и gender Как трудно это может быть

Очевидно, что это отражает отсутствие понимания MDX с моей стороны Любые указатели?. качеству вводного материал будет оценен.

ответ

3

важно понимать, что в MDX вы строите наборов членов по каждой оси, а не указание имен столбцов, как табличная строк. вы описываете 2-мерную сетку Результаты, а не линейный набор строк. Если вы представляете каждое измерение в виде таблицы, набор элементов представляет собой набор уникальных значений из одного столбца в этой таблице.

Когда вы выбираете меру как член (как в первом примере), похоже, что вы выбираете из таблицы, поэтому ее легко понять неправильно. Когда вы выбираете Dimension, вы получаете много членов и перекрестное соединение между строками и столбцами (которое в этом случае является разреженным, потому что имена и гендерные группы от 1 до 1).

Таким образом, вы могли бы Crossjoin эти два измерения на одной оси, а затем отфильтровать пустые клетки:

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

который должен дать вам результаты, которые имеют один столбец (EVENT_COUNT) и 10 строк, в которых каждая строка состоит из кортежа (имя, пол).

Я надеюсь, что это наведет вас на правильный путь, и, пожалуйста, не стесняйтесь спрашивать, хотите ли вы, чтобы я уточнил.

Для общего вводного материала, я думаю, что книга «MDX Solutions» является хорошим местом для начала: http://www.amazon.ca/MDX-Solutions-Microsoft-Analysis-Services/dp/0471748080/

2

Для онлайн MDX вводного материала, вы можете посмотреть на этот gentle introduction, который представляет основной MDX концепции.

Смежные вопросы