Intersección en MDX

Recientemente me encontré con un problema en nuestro SQL Server 2008 Analysis Services Cube. Imagina que tienes un almacén de datos de ventas simple con pedidos y productos. Cada pedido puede asociarse con varios productos, y cada producto puede estar contenido en varios pedidos. Por lo tanto, el almacén de datos consta de al menos 3 tablas: una para los Productos, una para los Pedidos y otra para la tabla de referencia, modelando la relación n: n entre ambas. La pregunta que quiero que responda nuestro cubo es: ¿Cuántos pedidos hay que contengan tanto el producto x como el producto y? En SQL, esto es fácil:

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

Dado que soy bastante competente en SQL, pero un novato en MDX, no he podido implementar eso en MDX. He intentado usar medidas de conteo distintas, las funciones MDXintersect ynonempty y subcubes. También intenté duplicar las dimensiones lógicamente (agregando la dimensión al cubo dos veces) así como físicamente (duplicando la tabla de origen de datos y la dimensión).

Enhttp://www.zeitz.net/thts/intersection.zip, puede descargar un archivo zip de 25kB de tamaño que contiene un script SQL con algunos datos de prueba y la solución de Analysis Services utilizando las tablas.

Estamos utilizando SQL Server 2008 R2 y su contraparte de Analysis Services. Las consideraciones de rendimiento no son tan importantes, ya que el volumen de datos es bastante bajo (millones de filas) en comparación con los otros grupos de medidas incluidos en ese cubo (miles de millones de filas).

El objetivo final sería poder usar la funcionalidad deseada en OLAP estándar (las medidas personalizadas están bien), ya que Excel es nuestra principal interfaz, y nuestros clientes desean elegir sus productos de la lista de dimensiones y obtener el resultado correcto. El cubo mide. Pero incluso una MDX-Query independiente de trabajo sería de gran ayuda.

¡Gracias!

Editar el 12 de marzo ¿Perdí algo o no puedo resolver esto de alguna manera?

Si ayuda a construir el mdx, aquí hay otra forma de obtener los resultados en sql, usando subquerys. Se puede anidar aún más.

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

Intenté algo como esto con subcubos en mdx, pero no logré tener éxito.

Respuestas a la pregunta(2)

Su respuesta a la pregunta