Пересечение в MDX

Недавно я столкнулся с проблемой в нашем кубе служб аналитики SQL Server 2008. Представьте, что у вас есть простое хранилище данных о продажах с заказами и продуктами. Каждый заказ может быть связан с несколькими продуктами, и каждый продукт может содержаться в нескольких заказах. Таким образом, хранилище данных состоит как минимум из 3 таблиц: одна для продуктов, одна для заказов и одна для справочной таблицы, моделирующая отношение n: n между обеими. Вопрос, на который я хочу ответить нашему кубу: сколько существует заказов, которые содержат как продукт x, так и продукт y? В SQL это легко:

select orderid from dbo.OrderRefProduct
where ProductID = 1
intersect
select orderid from dbo.OrderRefProduct
where ProductID = 3

Так как я довольно опытный в SQL, но новичок в MDX, я не смог реализовать это в MDX. Я пытался использовать различные меры подсчета, функции MDXintersect а такжеnonempty и субкубы. Я также попытался продублировать измерения логически (добавив измерение в куб дважды), а также физически (дублируя таблицу источника данных и измерение).

Наhttp://www.zeitz.net/thts/intersection.zipможно загрузить zip-файл размером 25 КБ, содержащий скрипт SQL с некоторыми данными испытаний и решение служб Analysis Services с использованием таблиц.

Мы используем SQL Server 2008 R2 и его аналог служб Analysis Services. Соображения производительности не так важны, так как объем данных довольно мал (миллионы строк) по сравнению с другими группами мер, включенными в этот куб (миллиарды строк).

Конечная цель заключается в том, чтобы иметь возможность использовать желаемую функциональность в стандартном OLAP (пользовательские рассчитанные показатели в порядке), поскольку Excel является нашим основным интерфейсом, и наши клиенты хотели бы выбрать свои продукты из списка измерений и получить правильный результат в куб измеряет. Но даже работающий автономный MDX-Query очень помог бы.

Спасибо!

Изменить 12 марта Я что-то пропустил или могуэто как-то решить?

Если это помогает построить MDX, вот еще один способ получить результаты в SQL, используя подзапросы. Это может быть дальше вложенным.

select distinct b.orderid from
(
select distinct orderid from dbo.OrderRefProduct
where ProductID = 1
) a
join dbo.OrderRefProduct b on (a.orderid = b.orderid)
where ProductID = 3

Я пробовал что-то подобное с субкубами в MDX, но нене удается добиться успеха. Я

Ответы на вопрос(2)

Ваш ответ на вопрос