Consulta de varios hechos y consultas de granularidad múltiple en dimensiones no compatibles

Si se añade una dimensión no compatible a la consulta, la naturaleza de los resultados devueltos por la consulta enlazada cambiará. Ya no es posible agregar registros al nivel común más bajo de granularidad, porque una parte de la consulta tiene una dimensionalidad diferente a la de la otra parte de la consulta. El resultado devuelto se compone, en realidad, de dos listas correlacionadas.
Hechos múltiples y cardinalidad en dimensiones no compatibles

Resultado

Los resultados de las distintas consultas sobre los esquemas en estrella respectivos tienen este aspecto.

Salida de informe de lista
Salida de informe de lista

Si se consultan los mismos elementos de los dos esquemas en estrella, se obtiene el siguiente resultado.

Salida de informe de lista

En este resultado, el nivel más bajo de granularidad para los registros de Sales genera la devolución de más registros por cada combinación de mes y producto. Ahora existe una relación 1-n entre las filas que se han devuelto de Product Forecast y las que se han devuelto de Sales.

Cuando se compara esto con el resultado devuelto en el ejemplo de esta consulta de varios hechos y granularidad múltiple sobre dimensiones compatibles, se puede observar que se devuelven más registros y que los resultados de Expected Volume se repiten varias veces para Order Methods. Al añadir Order Method a la consulta, se cambia de forma eficaz la relación entre Quantity data y Expected Volume data a una relación 1-n. Ya no será posible relacionar un valor único de Expected Volume con un valor de Quantity.

La agrupación por clave Month demuestra que el resultado de este ejemplo se basa en el mismo conjunto de datos que el resultado de consultas de varios hechos y granularidad múltiple pero con un nivel mayor de nivel de detalles.

SQL

El SQL unido generado para este ejemplo es muy parecido al SQL generado en la consulta de varios hechos y granularidad múltiple . La principal diferencia es que se ha añadido Order Method. Order Method no es una dimensión compatible y afecta sólo a las consultas relativas a la tabla Sales Fact.

select 
	D2.QUANTITY as QUANTITY,
	D3.EXPECTED_VOLUME as EXPECTED_VOLUME, 
	coalesce(D2.PRODUCT_NAME,D3.PRODUCT_NAME) as PRODUCT_NAME, 
	coalesce(D2.MONTH_NAME,D3.MONTH_NAME) as MONTH_NAME, 
	D2.ORDER_METHOD as ORDER_METHOD
from 
	(select 
	PRODUCT.PRODUCT_NAME as PRODUCT_NAME,
	TIME.MONTH_NAME as MONTH_NAME,
	ORDER_METHOD.ORDER_METHOD as ORDER_METHOD,
	XSUM(SALES_FACT.QUANTITY for TIME.CURRENT_YEAR,TIME.QUARTER_KEY,
	TIME.MONTH_KEY,PRODUCT.PRODUCT_LINE_CODE,PRODUCT.PRODUCT_TYPE_CODE,
	PRODUCT.PRODUCT_KEY,ORDER_METHOD_DIMENSION.ORDER_METHOD_KEY) as
QUANTITY
from 
	PRODUCT_DIMENSION PRODUCT
	join
	SALES_FACT SALES_FACT
	on (PRODUCT.PRODUCT_KEY = SALES_FACT.PRODUCT_KEY)
	join 
	ORDER_METHOD_DIMENSION ORDER_METHOD
	on (ORDER_METHOD.ORDER_METHOD_KEY = SALES_FACT.ORDER_METHOD_KEY)
	join TIME_DIMENSION TIME
	on ( TIME.DAY_KEY = SALES_FACT.ORDER_DAY_KEY)
where 
	(PRODUCT.PRODUCT_NAME in ('Aloe Relief','Course Pro Umbrella'))
and 
	( TIME.MONTH_NAME in ('April 2004','February 2004','February 2006'))
 group by 
	PRODUCT.PRODUCT_NAME, 
	TIME.MONTH_NAME, 
	ORDER_METHOD.ORDER_METHOD 
 ) D2 
 full outer join 
(select 
	PRODUCT.PRODUCT_NAME as PRODUCT_NAME,
	TIME.MONTH_NAME as MONTH_NAME,
	XSUM(PRODUCT_FORECAST_FACT.EXPECTED_VOLUME for TIME.CURRENT_YEAR,
	TIME.QUARTER_KEY,TIME.MONTH_KEY,PRODUCT.PRODUCT_LINE_CODE,
	PRODUCT.PRODUCT_TYPE_CODE,PRODUCT.PRODUCT_KEY) as EXPECTED_VOLUME
from 
	PRODUCT_DIMENSION PRODUCT
	join 
	PRODUCT_FORECAST_FACT PRODUCT_FORECAST_FACT
	on (PRODUCT.PRODUCT_KEY = PRODUCT_FORECAST_FACT.PRODUCT_KEY)
	join 
(select 
	TIME.CURRENT_YEAR as CURRENT_YEAR,
	TIME.QUARTER_KEY as QUARTER_KEY,
	TIME.MONTH_KEY as MONTH_KEY,
	XMIN(TIME.MONTH_NAME for TIME.CURRENT_YEAR, TIME.QUARTER_KEY,
	TIME.MONTH_KEY) as MONTH_NAME
from 
	TIME_DIMENSION TIME
group by 
	TIME.CURRENT_YEAR,
	TIME.QUARTER_KEY,
	TIME.MONTH_KEY
	) TIME
	on (TIME.MONTH_KEY = PRODUCT_FORECAST_FACT.MONTH_KEY)
where 
	(PRODUCT.PRODUCT_NAME in ('Aloe Relief','Course Pro Umbrella'))
and 
	(TIME.MONTH_NAME in ('April 2004','February 2004','February 2006')) 
 group by  
	PRODUCT.PRODUCT_NAME, 
	TIME.MONTH_NAME 
	) D3 
	on ((D2.PRODUCT_NAME = D3.PRODUCT_NAME) and  
	(D2.MONTH_NAME = D3.MONTH_NAME))