¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Armadilhas de SQL [Chasm / Fan Trap]: Exemplos simples e soluções claras

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

Olá a todos,

Já pesquisei no SDN sobre este assunto, mas logo fiquei confuso.

Alguém pode explicar com um exemplo muito simples sobre as armadilhas de SQL [chasm / fan trap] e a solução para o mesmo?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Também gostaria de recomendar a leitura de "Criação de Universos com SAP BusinessObjects": capítulo 7 - Camada de Fundação de Dados - Tópicos Avançados, pois contém uma explicação muito boa sobre as armadilhas de design SQL (armadilha de ventilador, armadilha de abismo e loop).

Criação de Universos com SAP BusinessObjects: Taha M. Mahmoud: 9781782170907: Amazon.com: Livros

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Você tem algum exemplo em moda eletrônica ou clube?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Obrigado pela resposta.

Para mais informações, consulte os documentos de Dave sobre os temas.

Excelente explicação com exemplos.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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:

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?