Hola Swetha,
Trampa de abismo
La trampa de abismo ocurre cuando dos uniones "muchos a uno" convergen en una sola tabla. Por ejemplo, un cliente puede realizar muchos pedidos y/o muchos préstamos.
Trampa de abanico
La trampa de abanico ocurre cuando una unión "uno a muchos" enlaza una tabla que a su vez está enlazada por otra unión "uno a muchos".
Por ejemplo, al ejecutar una consulta que solicita el total de pedidos por cada línea de pedido, para un cliente en particular, se devuelve un resultado incorrecto, ya que se está realizando una función de agregación en la tabla en el extremo "uno" de la unión, mientras aún se está uniendo al extremo "muchos".
Ejemplo de trampa de abismo
:
Por ejemplo:
A >- B -< C
( Empleados >-- Sala de exhibición --< Salario)
- Cada sala de exhibición tiene muchos empleados
- Cada sala de exhibición tiene muchas cifras de salario anual
El número de registros de empleados no debería afectar el salario total en el informe.
Si se escribe una consulta que abarque las tres tablas, los datos de la tabla A y C se duplicarían y los valores de medida se verían exagerados. Por ejemplo,
- X filas a la izquierda
- Y filas a la derecha
- X * Y filas en el conjunto combinado
Solución 1:
Define un contexto para cada tabla en el extremo "muchos" de las uniones.
Contexto = Significado
- Un contexto es un subconjunto de uniones en un universo
- Ese subconjunto de uniones tiene un significado particular
En nuestro ejemplo, podrías definir un contexto desde A hasta B y desde A hasta C. Un contexto contiene cada unión en el camino. Esto crea dos declaraciones SQL y dos tablas separadas en Business Objects, evitando la creación de un producto cartesiano. Utilizar contextos es la forma más efectiva de resolver trampas de abismo.
Solución 2:
Selecciona la opción 'Múltiples declaraciones SQL para cada medida' en el cuadro de diálogo de Parámetros del Universo en la herramienta. Solo se aplica a medidas. Obligas al motor de generación de SQL en Reporter a generar consultas SQL para cada medida que aparezca en el panel de consulta.
Ejemplo de trampa de abanico
:
Por ejemplo:
A -< B -< C (Ej: Cliente --< Pedidos --< Líneas de pedido)
Una trampa de abanico no es tan grave como una trampa de abismo. De hecho, hay muchas trampas de abanico que pueden ocurrir en un diseño de universo y pueden ignorarse siempre y cuando controles qué tipos de objetos utilizas.
Hay dos formas de resolver un problema de trampa de abanico.
• Usando un alias y la función de conciencia de agregación. Esta es la forma más efectiva de resolver el problema de la trampa de abanico.
• Alterando los parámetros de SQL para el universo. Esto solo funciona para objetos de medida.
Ambos métodos se describen a continuación.
Solución 1:
Los alias pueden resolver trampas de abismo
- Conocidos como alias de tabla al escribir declaraciones SQL
- Utilizados por BusinessObjects para separar lógicamente la trampa en piezas.
Creas una tabla alias y utilizas la función de conciencia de agregación. No puedes usar esta opción si tienes objetos incompatibles. Puedes hacerlo de la siguiente manera:
1. Crea un alias para la tabla que está produciendo la agregación multiplicada.
2. Crea una unión de uno a uno entre la tabla original y la tabla alias.
3. Modifica la declaración select para las columnas que se suman de modo que las columnas en la tabla alias se sumen y no la tabla original.
4. Aplica la función @AggregateAware a la declaración select. por ejemplo:
@AggregateAware(SUM(ORDERS.TOTAL_VALUE) , SUM(ORDERS_