2014-10-13 1 views
0

В MDX мы можем CROSS JOIN двух членов, меры и члена, но не двух мер. Почему это так? Что это значит?MDX - Почему кросс-соединение между мерами не работает?

SELECT 
    [Measures].[xyz] * [DimTable1].[SomeHierarchy].[Level] on 0, 
    [DimTable2].[SomeOtherHierarchy].&[Value] on 1 
FROM [MyCube] 
// WORKS 

SELECT 
    [Measures].[xyz] on 0, 
    [DimTable2].[SomeOtherHierarchy].&[Value] * [DimTable1].[SomeHierarchy].[Level] on 1 
FROM [MyCube] 
// OF COURSE IT WORKS 

SELECT 
    [Measures].[xyz] * [Measures].[ABC] on 0, 
    [DimTable1].[SomeHierarchy].&[Value] on 1 
FROM [MyCube] 
// DOES NOT WORK!! 
+0

Почему вы хотите пересечь две меры? Какой конечный результат вы ожидаете? Для размеров вы получаете возможные комбинации атрибутов измерения, но почему вы хотите сделать это с помощью мер? – mmarie

+0

Я пытаюсь понять, что происходит на заднем плане, когда две меры пересекаются. Я очень хорошо понимаю, что кроссхоин подразумевает различные возможные условия. Но мой вопрос заключается в том, что происходит, когда меры пересекаются и почему они выходят из строя. Это не то, что я хочу сделать, но кое-что, что я хочу понять. – SouravA

+0

@Sourav_Agasti кросс-соединение просто декартово произведение всех членов одного набора со всеми членами из другого набора ... предположим, что в итоге вы получите массивный набор из 2-х членов кортежей. Большинство этих кортежей находятся в пустом пространстве куба, т. Е. Для них нет результатов. Свойство autexists перекрестного соединения означает, что эти пустые кортежи отбрасываются. – whytheq

ответ

1

Я верю, что ты забыл:....

ВЫБРАТЬ [дд] [чч] [mm1] * [дд] [чч] [мм2] на 0, [ DimTable1]. [SomeHierarchy]. & [Value] on 1 FROM [MyCube]

не работает ни. [Меры] не отличается от [dd] в моем примере. В MDX вы не можете определить кортеж с _ несколькими членами _ той же иерархии _. Взгляните на это gentle introduction, объяснив основные понятия.

+0

Спасибо, я понимаю понятие кортежа. Сообщение об ошибке, которое появляется, когда 2 члена одной и той же иерархии пересекаются (** Иерархия xyz используется более одного раза в функции Crossjoin. **) довольно отличается от нее, помещая их в один и тот же кортеж (** Иерархия «xyz» появляется не один раз в кортеже. **). Но удивительно, когда я перехожу к двум мерам, сообщение об ошибке отличается от других. ** Функция Axis0 ожидает выражения набора кортежей для аргумента. Было использовано строковое или числовое выражение. ** – SouravA

+0

Извините, не знаю подробностей SSAS; возможно, детали реализации. –

0

EDIT
Ваш третий вопрос, который не работает, выглядит следующим образом:

enter image description here

желтая область пуста, так что понятно, что это не устраивает.

EDIT
Ниже приводится аналогия с использованием сводных таблиц Excel, которые используют технологию OLAP

Если вы поставите перекрестное соединение мер А и В на строках вы получите что-то вроде этого:

enter image description here

Затем, если мы добавим очень маленький уровень (с 4 элементами) на столбцы, получим следующее:

enter image description here

Итак, что будет в основном корпусе этой таблицы?
A count возможно и, возможно, в MDX, если вы создадите индивидуальную меру (не имеете сервера для проверки этого утверждения). Excel по умолчанию будет равен count, но результат довольно бессмыслен?

enter image description here

+0

Ваша аналогия неправильная, я чувствую. Когда мы явно не заполняем какой-либо кортеж (содержащий все иерархии), он выбирает элемент по умолчанию из этой иерархии. Если бы мы просто избегали ** CROSS JOIN **, он принял бы [член по умолчанию] (http://www.bp-msbi.com/2011/01/default-measure-in-ssas-cubes/) (обычно ** ВСЕ **) из всех иерархий, которые возвращают максимально возможное значение меры. Здесь в этом случае я бы ожидал чего-то подобного, но он ошибся. – SouravA

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