Avalados por :

Otimização de Consultas SQL no CR para Análise de Parâmetros Delimitados por Tubos

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

Em minha limitada experiência com CR, sempre usei uma conexão de banco de dados de comando para poder escrever meu próprio SQL. No entanto, agora preciso analisar um parâmetro delimitado por tubos para obter meu valor para a cláusula where, então estou selecionando várias tabelas e unindo-as através da guia Vínculos de Especialistas em Bancos de Dados. Tudo funciona bem, mas depois de fazer isso e depois analisar o parâmetro com a fórmula abaixo no Especialista de Seleção, percebo que não há cláusula where na consulta SQL e, embora o relatório eventualmente mostre os valores corretos, primeiro passa por milhares de registros. Aqui está minha fórmula de Especialista em Seleção de Registros:

StringVar array Parm1;

Parm1 := Split({?DATA_AREA}, "|");

{SO_ORDERS.CASE_ID} = Parm1[2]

Se eu alterar "Parm1[2]" na última linha por um ID de Caso válido, então há uma cláusula where no SQL e o relatório é gerado imediatamente.

Parece que a fórmula de seleção de registros é aplicada DEPOIS que todos os registros são buscados (sem uma cláusula where) quando uso o valor do parâmetro analisado, mas quando codifico um valor válido, ele o coloca na cláusula where ANTES do SQL ser executado. Existe alguma maneira de analisar primeiro o parâmetro e depois usar esse valor analisado na cláusula where do SQL?

Obrigado.

Bill

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

2 Respuestas

0
Cargando...

°Perfeito! Custou-me um pouco porque percebi que precisava de um segundo parâmetro, mas simplesmente dupliquei o que havia feito para o primeiro, criei uma nova fórmula no relatório principal e a associei com o outro parâmetro, e funcionou bem. °Obrigado!

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

SIM, o Crystal executará a consulta primeiro para obter 100% dos dados e depois aplicará a condição de seleção de registros. Para aumentar o desempenho, é necessário passar a condição WHERE ao nível do comando em vez do nível do relatório. Portanto, é necessário criar um relatório utilizando o comando "adicionar" desta forma

select * from nometabela where campo={?Parâmetro}

{?Parâmetro} é um parâmetro ao nível do comando.

Agora insira este relatório como um sub-relatório em outro relatório que não tem conexão, mas tem um parâmetro

{?ÁREA_DE_DADOS} e crie uma fórmula como esta no relatório principal

Split({?ÁREA_DE_DADOS}, "|")[2]

Agora clique com o botão direito no sub-relatório e vá para alterar links do sub-relatório e adicione esta fórmula do relatório principal e vincule-a ao parâmetro do sub-relatório {?Parâmetro} sem vincular nenhum campo de base de dados do sub-relatório.

Agora seu sub-relatório será executado com a cláusula WHERE para obter os dados.

Saudações,

Raghavendra

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?