Olá Swetha,
Armadilha de abismo
A armadilha de abismo ocorre quando duas junções "muitos para um" convergem em uma única tabela. Por exemplo, um cliente pode realizar muitos pedidos e/ou muitos empréstimos.
Armadilha de leque
A armadilha de leque ocorre quando uma junção "um para muitos" liga uma tabela que, por sua vez, está ligada por outra junção "um para muitos".
Por exemplo, ao executar uma consulta que solicita o total de pedidos para cada linha de pedido, para um cliente específico, um resultado incorreto é retornado, pois uma função de agregação está sendo realizada na tabela no extremo "um" da junção, enquanto ainda está se unindo ao extremo "muitos".
Exemplo de armadilha de abismo
:
Por exemplo:
A >- B -< C
(Funcionários >-- Sala de exibição --< Salário)
- Cada sala de exibição tem muitos funcionários
- Cada sala de exibição tem muitos valores de salário anual
O número de registros de funcionários não deve afetar o salário total no relatório.
Se uma consulta que abrange as três tabelas for escrita, os dados das tabelas A e C serão duplicados e os valores de medida serão exagerados. Por exemplo,
- X linhas à esquerda
- Y linhas à direita
- X * Y linhas no conjunto combinado
Solução 1:
Defina um contexto para cada tabela no extremo "muitos" das junções.
Contexto = Significado
- Um contexto é um subconjunto de junções em um universo
- Esse subconjunto de junções tem um significado específico
Em nosso exemplo, você poderia definir um contexto de A para B e de A para C. Um contexto contém cada junção no caminho. Isso cria duas declarações SQL e duas tabelas separadas no Business Objects, evitando a criação de um produto cartesiano. Usar contextos é a forma mais eficaz de resolver armadilhas de abismo.
Solução 2:
Selecione a opção 'Múltiplas declarações SQL para cada medida' na caixa de diálogo de Parâmetros do Universo na ferramenta. Aplica-se apenas a medidas. Você força o motor de geração de SQL no Reporter a gerar consultas SQL para cada medida que aparece no painel de consulta.
Exemplo de armadilha de leque
:
Por exemplo:
A -< B -< C† (Ex: Cliente --< Pedidos --< Linhas de pedido)
Uma armadilha de leque não é tão grave quanto uma armadilha de abismo. Na verdade, há muitas armadilhas de leque que podem ocorrer em um design de universo e podem ser ignoradas contanto que você controle quais tipos de objetos está usando.
Existem duas maneiras de resolver um problema de armadilha de leque.
ï Usando um alias e a função de consciência de agregação. Esta é a forma mais eficaz de resolver o problema da armadilha de leque.
ï Alterando os parâmetros de SQL para o universo. Isso funciona apenas para objetos de medida.
Ambos os métodos são descritos a seguir.
Solução 1:
Os aliases podem resolver armadilhas de abismo
- Conhecidos como alias de tabela ao escrever declarações SQL
- Usados pelo BusinessObjects para separar logicamente a armadilha em partes.
Você cria um alias de tabela e usa a função de consciência de agregação. Você não pode usar esta opção se tiver objetos incompatíveis. Você pode fazer isso da seguinte maneira:
1. Crie um alias para a tabela que está produzindo a agregação multiplicada.
2. Crie uma junção de um para um entre a tabela original e o alias da tabela.
3. Modifique a declaração select para as colunas que estão sendo somadas de modo que as colunas na tabela alias sejam somadas e não na tabela original.
4. Aplique a função @AggregateAware à declaração select. por exemplo: