[Resolvido] Colunas da Consulta através de campo Duplo Select

Srs,

Tenho uma query que tem 52 colunas possiveis. Estou tentando fazer uma consulta que além dos filtros comuns (empresa, departamento, data de programação, data de realização, etc…) o usuario possa escolher somente as colunas que quer que apareça. Pode ser todas ou somente algumas.
Tentei fazer com um Duplo Select, mas não consegui que os campos aparecessem na consulta.
Tenho uma aplicação em C# que faz isso hoje, varrendo a listbox e inserindo na query só as colunas selecionadas. Busquei no forum mas não encontrei nada parecido.
Tentei incluir a query completa e fazer um duplo select com os campos da consulta, mas não funcionou porque tenho colunas de % que são calculados conforme datas informadas no filtro (através de functions no oracle).
Alguem ja viu algo parecido ???

sds

Marcus Vinicius

não entendi bem mais o SC ja tem o recurso para selecionar em tempo de execução quais colunas se deseja ver, pode inclusive pre-determinar quais serão fixas sem a possibilidade de retirar y quais não…
mais isso já depois de recuperar os dados…

Não sei se é o que precisa mas tem uma opção no filtro para escolher as colunas que deseja.
Inicie o relatório pelo filtro, no filtro crie um campo do tipo Seleção/Campos da Consulta.
Também existe um botão na barra de ferramentas da consulta (colunas), como o Willian postou.

Pelo que entendi ele já faz uso desse tipo de campo no filtro.

me lembro de um bug a respeito, todas as colunas devem estar disponíveis na consulta, nenhum pode estar escondida, a consulta deve ser iniciada pelo filtro para seleção dos campos.

Pode fazer isso manualmente.

PessoALL,

Grato pelas excelentes ideias e por responderem tão prontamente. Ainda não consegui fechar meu relatorio porque a consulta (creio eu) está muito grande e deu um erro na hora de gerar, abri um chamado no suporte e estou aguardando um posicionamento da netmake.
Quanto as idéias que me deram, tenho algumas considerações/questionamentos/esclarecimentos, como diria Jack, vamos por partes.

Willian,
O relatorio “a principio” tem 52 colunas e na media, entre 15 e 70 mil linhas… e como as colunas são adicionadas mediante a necessidade de varios setores e o volume de dados tende a crescer exponencialmente (em menos de 6 meses ultrapasso 1 milhão de linhas) a idéia é só emitir as que realmente forem necessarias, por questão de performance mesmo. Tenho alguns filtros para reduzir os dados emitidos, mas em determinados momentos vou necessitar emitir um geral, para montar graficos e estatisticas.

Rodrigo e Haroldo
Ja usei o recurso em questão em um outro projeto, e como não uso muito, realmente não sabia como faze-lo, obrigado pela otima dica… agora não esqueço mais… kkkk
A ideia justamente é algo assim, a query só chamar o que for necessario por conta do volume de dados e porque trabalho com dblink em outra base, trago dados da base principal e alguns itens vão buscar dados relacionados em outro banco, por mais que seja no mesmo servidor, por conta do volume de dados a consulta perde em performance.
Hoje tenho algo parecido em C# que monto a query so com os itens selecionados, queria fazer algo assim, digo as colunas e insiro direto na query a parte do sql correspondente, mas no SC não sei se é possivel.

Srs,

Por hora estou aguardando o atendimento de um chamado no suporte, minha query tem algum erro (roda normal via C# e no PL/SQL), como tem subquerys e varias chamadas de funções, acho que o SC está se perdendo na hora de criar os campos da consulta, pois não exibe nenhum na seção de edição de campos não aparece nenhuma. Assim que obtiver uma resposta e que a consulta funcione, retorno a voces se consegui realizar mais essa proeza.
Grato pela ajuda e desculpe pela resposta tão grande.

sds

m Vinicius

Legal, faz um teste em configurações exibição total ou parcial, coloca parcial 50 e habilita os botões de navegação em barra de tarefas, acredito que irá rodar mais rapidamente.
Sua tabela da base de dados tem índices para o where em questão?

Rodrigo,

A query não rola… kkkk estou aguardando a resposta de um chamado. Até agora me mandaram zerar cache do browser, verificar conexão… Agora o atendente me mandou um help de permissões de execução de arquivos pra Linux (meu SC tá no windows e isso é informado na abertura do Ticket).
Vou tentar refazer a query… iniciando com um numero menor de colunas e relacionamentos.
Quanto a paginação, dependendo do tamanho da query, eu uso 50 registros por página mesmo eu trabalho na integração de alguns sistemas: sistema de ponto, sistema de apropriação de mão de obra e sistema de acompanhamento de obras e Primavera Project Planner (trabalho numa empresa de engenharia e construção).
Coleto dados nesses 4 sistemas e crio relatórios gerenciais que são disponibilizados em um portal de gerenciamento ovolume de dados é imenso e a performance em desktop está insatisfatoria, no web fica a contento… e as tabelas tem índices sim…
Vou tentar aqui por partes e te atualizo da evolução dos trabalhos.

vlw

m Vinicius

Manda o erro da query ou a própria query, quem sabe podemos ajudar.

Então, a query não exibe os campos lá no editar campos.
Não dá erro quando salva o select mas não gera a consulta pois diz que não foi especificado campo para exibir.

Detalhe, acho que o problema são as subquerys. Estou reconstruindo a query no SC, fiz a parte sem subs no Query Builder e funcionou, agora vou inserir as FUNCTIONS manualmente, uma a uma e ver o que rola. Posto aqui a evolução do trabalho assim que tiver um update satisfatório. Se eu fizer todos os relacionamentos da query ela vai ficar ainda maior, trabalho com functions porque em alguns casos busco dados em outra base, outro schema e em determinados dados o relacionamento é muito grande e o execution plan da zorra fica gigante haja servidor pra rodar… rsrsrs

Segue a query :
[font=Verdana][/font][code]

SELECT (SELECT WBS FROM EPCCQ.V_ACOMP_DESVIO WHERE CODIGO = FSM.ATIV_SIG),
FSM.FOSE_NUMERO,
FSM.FCES_WBS,
FSM.FCES_DESCRICAO,
FSM.ATIV_SIG,
AD.ATIV_NOME,
(SELECT FOSE_DESCRICAO
FROM EPCCQ.FOLHA_SERVICO FS
WHERE FS.FOSE_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO
AND FS.FOSE_ID = FSM.FOSE_ID),
FSM.FCES_SIGLA,
(SELECT MAX(TO_DATE(FSMP_DATA, ‘DD/MM/RRRR’))
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
WHERE FSMP_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO
AND FSMP_FOSM_ID = FSM.FOSM_ID
AND FSMP_DATA <= TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’)),
TO_DATE(PKG_EPC_UTILS.DATAFIMPREVISTO(FSM.ATIV_CNTR_CODIGO,
FSM.ATIV_ID,
(SELECT MAX(FSMP.FSMP_DATA)
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG FSMP
WHERE FSMP_CNTR_CODIGO =
FSM.ATIV_CNTR_CODIGO
AND FSMP_FOSM_ID =
FSM.FOSM_ID),
FOSM_DUR_REAL),
‘DD/MM/RRRR’) AS “Fecha Fim Programacion “,
NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND(FSM.FOSM_QTD_PREV, 4)), 0),
NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSMP_AVANCO_ACM)
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
WHERE FSMP_CNTR_CODIGO =
FSM.ATIV_CNTR_CODIGO
AND FSMP_FOSM_ID = FSM.FOSM_ID
AND FSMP_DATA <=
TO_DATE(‘18/02/2015’,
‘DD/MM/RRRR’)),
4)),
0),
NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSMP_QTD_ACM)
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
WHERE FSMP_CNTR_CODIGO =
FSM.ATIV_CNTR_CODIGO
AND FSMP_FOSM_ID = FSM.FOSM_ID
AND FSMP_DATA <=
TO_DATE(‘18/02/2015’,
‘DD/MM/RRRR’)),
4)),
0),
UM.UNME_SIGLA,
TO_DATE(PKG_EPC_UTILS.FNC_DATAS(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
1,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’)),
‘DD/MM/RRRR’),
TO_DATE(PKG_EPC_UTILS.FNC_DATAS(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
2,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’)),
‘DD/MM/RRRR’),
NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSME_QTD_ACM)
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_EXEC
WHERE FSM.ATIV_CNTR_CODIGO =
FSME_CNTR_CODIGO(+)
AND FSM.FOSM_ID =
FSME_FOSM_ID(+)
AND FSME_DATA <=
TO_DATE(‘18/02/2015’,
‘DD/MM/RRRR’)),
4)),
0),
NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSME_AVANCO_ACM)
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_EXEC
WHERE FSM.ATIV_CNTR_CODIGO =
FSME_CNTR_CODIGO(+)
AND FSM.FOSM_ID =
FSME_FOSM_ID(+)
AND FSME_DATA <=
TO_DATE(‘18/02/2015’,
‘DD/MM/RRRR’)),
4)),
0),
(SELECT MAX(TO_DATE(FSME_DATA, ‘DD/MM/RRRR’))
FROM EPCCQ.FOLHA_SERVICO_MEDICAO_EXEC
WHERE FSM.ATIV_CNTR_CODIGO = FSME_CNTR_CODIGO(+)
AND FSM.FOSM_ID = FSME_FOSM_ID(+)
AND FSME_DATA <= TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’)),
D.DISC_SIGLA,
RLB.RPLB_NOME,
PKG_EPC_UTILS.FNC_UNIDACOM(UA.UNAC_SIGLA, 1),
PKG_EPC_UTILS.FNC_UNIDACOM(UA.UNAC_SIGLA, 2),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 1),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 2),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 4),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 5),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 6),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 7),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 8),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 9),
CASE
WHEN (D.DISC_SIGLA = ‘ENG’) THEN
PKG_EPC_UTILS.FNC_ESCOPOENG(FSM.ATIV_SIG)
ELSE
’ ’
END,
NVL(PKG_EPC_UTILS.FNC_PROGPERIODO(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
1),
0),
NVL(PKG_EPC_UTILS.FNC_EXECPERIODO(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
1),
0),
(SELECT LISTAGG(D.DCMN_NUMERO, ', ') WITHIN GROUP(ORDER BY D.DCMN_NUMERO)
FROM EPCCQ.FOLHA_DOCUMENTO FD, EPCCQ.DOCUMENTO D
WHERE FD.FODO_CNTR_CODIGO = D.DCMN_CNTR_CODIGO
AND FD.FODO_DCRV_DCMN_ID = D.DCMN_ID
AND FD.FODO_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO
AND FD.FODO_FOSE_ID = FSM.FOSE_ID),
NVL(PKG_EPC_UTILS.FNC_HOJASVERIFI(FSM.ATIV_CNTR_CODIGO, FSM.FOSE_ID),
0),
FCM.FCME_SIGLA,
PKG_EPC_UTILS.FNC_DATAIDPROG(FSM.ATIV_CNTR_CODIGO, FSM.ATIV_SIG, 1),
PKG_EPC_UTILS.FNC_DATAIDPROG(FSM.ATIV_CNTR_CODIGO, FSM.ATIV_SIG, 2),
(SELECT ATL.ATLI_TEXTO
FROM EPCCQ.ATRIBUTO_LISTA ATL
WHERE ATLI_ATPE_ID IN
(SELECT ATVI_ATPE_ID
FROM EPCCQ.ATRIBUTO_VINCULO ATV
WHERE ATV.ATVI_FOSE_ID = FSM.FOSE_ID
AND ATV.ATVI_CNTR_CODIGO = ATL.ATLI_CNTR_CODIGO
AND ATV.ATVI_ATPE_ID = ATL.ATLI_ATPE_ID
AND ATV.ATVI_ATLI_ID = ATL.ATLI_ID)
AND ATLI_ATPE_ID = 17
AND ATL.ATLI_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO),
(SELECT ATL.ATLI_TEXTO
FROM EPCCQ.ATRIBUTO_LISTA ATL
WHERE ATLI_ATPE_ID IN
(SELECT ATVI_ATPE_ID
FROM EPCCQ.ATRIBUTO_VINCULO ATV
WHERE ATV.ATVI_FOSE_ID = FSM.FOSE_ID
AND ATV.ATVI_CNTR_CODIGO = ATL.ATLI_CNTR_CODIGO
AND ATV.ATVI_ATPE_ID = ATL.ATLI_ATPE_ID
AND ATV.ATVI_ATLI_ID = ATL.ATLI_ID)
AND ATLI_ATPE_ID = 18
AND ATL.ATLI_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO),
(SELECT ATL.ATLI_TEXTO
FROM EPCCQ.ATRIBUTO_LISTA ATL
WHERE ATLI_ATPE_ID IN
(SELECT ATVI_ATPE_ID
FROM EPCCQ.ATRIBUTO_VINCULO ATV
WHERE ATV.ATVI_FOSE_ID = FSM.FOSE_ID
AND ATV.ATVI_CNTR_CODIGO = ATL.ATLI_CNTR_CODIGO
AND ATV.ATVI_ATPE_ID = ATL.ATLI_ATPE_ID
AND ATV.ATVI_ATLI_ID = ATL.ATLI_ID)
AND ATLI_ATPE_ID = 20
AND ATL.ATLI_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO),
(SELECT ATL.ATLI_TEXTO
FROM EPCCQ.ATRIBUTO_LISTA ATL
WHERE ATLI_ATPE_ID IN
(SELECT ATVI_ATPE_ID
FROM EPCCQ.ATRIBUTO_VINCULO ATV
WHERE ATV.ATVI_FOSE_ID = FSM.FOSE_ID
AND ATV.ATVI_CNTR_CODIGO = ATL.ATLI_CNTR_CODIGO
AND ATV.ATVI_ATPE_ID = ATL.ATLI_ATPE_ID
AND ATV.ATVI_ATLI_ID = ATL.ATLI_ID)
AND ATLI_ATPE_ID = 21
AND ATL.ATLI_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO)”,
PKG_EPC_UTILS.FNC_SITUACION(FSM.ATIV_CNTR_CODIGO, FSM.FOSE_ID),
PKG_EPC_UTILS.FNC_UNIMED(FSM.ATIV_CNTR_CODIGO, FSM.FOSE_UNME_ID),
PKG_EPC_UTILS.FNC_LOGAVANCE(FSM.ATIV_CNTR_CODIGO, FSM.FOSM_ID),
NVL(PKG_EPC_UTILS.FNC_PROGPERIODO(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
2),
0),
NVL(PKG_EPC_UTILS.FNC_EXECPERIODO(FSM.ATIV_CNTR_CODIGO,
FSM.FOSM_ID,
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
TO_DATE(‘18/02/2015’, ‘DD/MM/RRRR’),
2),
0)”,
UA.UNAC_SIGLA,
UA.UNAC_NOME,
(SELECT FOSE_QTD_PREVISTA
FROM EPCCQ.FOLHA_SERVICO
WHERE FOSE_ID = FSM.FOSE_ID
AND FOSE_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO),
PKG_EPC_UTILS.FNC_TCMITEM(FSM.ATIV_SIG, 10) AS "TCM WBS SisEPC "
FROM EPCCQ.V_FOLHA_SERVICO_MEDICAO FSM
LEFT JOIN EPCCQ.UNIDADE_MEDIDA UM
ON (FSM.FOSM_UNME_ID = UM.UNME_ID AND
FSM.ATIV_CNTR_CODIGO = UM.UNME_CNTR_CODIGO)
LEFT JOIN EPCCQ.UNIDADE_MEDIDA UNFS
ON (FSM.FOSE_UNME_ID = UNFS.UNME_ID AND
FSM.ATIV_CNTR_CODIGO = UNFS.UNME_CNTR_CODIGO)
LEFT JOIN EPCCQ.DISCIPLINA D
ON (FSM.FOSE_DISC_ID = D.DISC_ID AND
FSM.ATIV_CNTR_CODIGO = D.DISC_CNTR_CODIGO)
LEFT JOIN EPCCQ.ATIVIDADE AD
ON (FSM.ATIV_CNTR_CODIGO = AD.ATIV_CNTR_CODIGO AND
FSM.ATIV_ID = AD.ATIV_ID)
LEFT JOIN EPCCQ.UNIDADE_ACOMPANHAMENTO UA
ON (FSM.ATIV_CNTR_CODIGO = UA.UNAC_CNTR_CODIGO AND
FSM.FOSM_UNAC_ID = UA.UNAC_ID)
LEFT JOIN EPCCQ.RESPONSAVEL_LIBERACAO RLB
ON (RLB.RPLB_ID = FSM.FOSM_RPLB_ID AND
RLB.RPLB_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO)
LEFT JOIN EPCCQ.FOLHA_CRITERIO_MEDICAO FCM
ON (FSM.ATIV_CNTR_CODIGO = FCM.FCME_CNTR_CODIGO AND
FSM.FOSE_FCME_ID = FCM.FCME_ID)
WHERE (FSM.NIVEL = 2)
AND FCM.FCME_MODU_ID = 5
AND D.DISC_ID = 1
ORDER BY FSM.FOSE_NUMERO, FSM.FCES_WBS
[/code][font=Verdana][/font]

Dei uma analisada na sua query, realmente dá para tratar bem, segue algumas obs que fiz em uma parte dela para vc tentar adaptar ao SC


SELECT FSM.ATIV_SIG, -- após o campo ser criado, faça um lookup automático com a query SELECT WBS FROM EPCCQ.V_ACOMP_DESVIO WHERE CODIGO = '{FSM.ATIV_SIG}' --
       FSM.FOSE_NUMERO,
       FSM.FCES_WBS,
       FSM.FCES_DESCRICAO,
       FSM.ATIV_SIG,
       AD.ATIV_NOME,
	   FSM.ATIV_CNTR_CODIGO, -- mesmo esquema que acima e carregar o sub abaixo por lookup
       /*(SELECT FOSE_DESCRICAO
          FROM EPCCQ.FOLHA_SERVICO FS
         WHERE FS.FOSE_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO
           AND FS.FOSE_ID = FSM.FOSE_ID),*/
       FSM.FCES_SIGLA,
       -- abaixo criar um campo e fazer esse lookup
	   /*(SELECT MAX(TO_DATE(FSMP_DATA, 'DD/MM/RRRR'))
          FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
         WHERE FSMP_CNTR_CODIGO = FSM.ATIV_CNTR_CODIGO
           AND FSMP_FOSM_ID = FSM.FOSM_ID
           AND FSMP_DATA <= TO_DATE('18/02/2015', 'DD/MM/RRRR'))*/,
		   -- abaixo criar um campo e fazer lookup 
       /*TO_DATE(PKG_EPC_UTILS.DATAFIMPREVISTO(FSM.ATIV_CNTR_CODIGO,
                                             FSM.ATIV_ID,
                                             (SELECT MAX(FSMP.FSMP_DATA)
                                                FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG FSMP
                                               WHERE FSMP_CNTR_CODIGO =
                                                     FSM.ATIV_CNTR_CODIGO
                                                 AND FSMP_FOSM_ID =
                                                     FSM.FOSM_ID),
                                             FOSM_DUR_REAL),
               'DD/MM/RRRR') AS "Fecha Fim Programacion "
			   */,
		-- aqui abaixo tente resolver por lookup, talvez tenha que criar um método php para substituir NVL
       /* NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND(FSM.FOSM_QTD_PREV, 4)), 0),
        NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSMP_AVANCO_ACM)
                                           FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
                                          WHERE FSMP_CNTR_CODIGO =
                                                FSM.ATIV_CNTR_CODIGO
                                            AND FSMP_FOSM_ID = FSM.FOSM_ID
                                            AND FSMP_DATA <=
                                                TO_DATE('18/02/2015',
                                                        'DD/MM/RRRR')),
                                         4)),
           0),
       NVL(PKG_EPC_UTILS.FNC_FLOAT(ROUND((SELECT MAX(FSMP_QTD_ACM)
                                           FROM EPCCQ.FOLHA_SERVICO_MEDICAO_PROG
                                          WHERE FSMP_CNTR_CODIGO =
                                                FSM.ATIV_CNTR_CODIGO
                                            AND FSMP_FOSM_ID = FSM.FOSM_ID
                                            AND FSMP_DATA <=
                                                TO_DATE('18/02/2015',
                                                        'DD/MM/RRRR')),
                                         4)),
           0),*/
       UM.UNME_SIGLA,
	   -- abaixo lookup
	   
	   --bom daqui para baixo dá mais uma analisada e verifica o que consegue mudar

Resumindo o ideal era trazer a tabela principal e criar campos no SC ou apenas fazer um lookup para substituir os subselects e recuperar os dados.
As funções do PLSQL se não conseguir rodar, tente fazer a mesma função no próprio SC, as vezes com php fica bem mais simples ou até mesmo pelas macros do SC vc resolverá

Otima ideia. Não tinha pensado nessa possibilidade.
Vou criar lookups e ver o que rola.

valew pelas dicas !!!

PessoALL,

Consegui resolver o “causo”, mas tive realmente que fazer alguns ajustes na minha query.

Rodrigo, Haroldo e Willian

Valew pelas dicas.

Uma observação: Tenho uma query kilometrica, precisava realmente otimiza-la, mas nessa brincadeira, percebi que pelo menos nesse caso, o uso de subquerys no SC não funcionou. Não sei se meu caso em particular é uma exceção, mas comecei a refazer a query pelo query builder do SC e algumas subquerys existem por ser inviavel (a nivel de performance) fazer o relacionamento direto com as tabelas em questão, a consulta funcionava perfeitamente no SC com Functions e relacionamentos diretos. Com subquery não funcionou em momento algum.
No meu gerador de relatórios original, a query existe em uma tabela do banco, porque tenho sempre que inserir novas colunas nesse relatório e era inviável gerar um executável a cada nova coluna criada ou a cada modificação na coluna existente. Usando o SC, por hora não consegui usar esse modelo atual e tive que refazer muita coisa. Mas vou continuar pesquisando e caso consiga fazer como gostaria, posto aqui ma atualização.

Encerrei meu chamado na NetMake sem solução pois o atendende me deu 200 voltas e nunca me respondia se existia alguma limitação do SC quanto ao uso de subquerys nem quanto ao tamanho da query. Depois de me mandar revisar todas as configurações do php ele me disse que meu servidor não tem capacidade suficiente pra rodar a query, que eu devia testar em uma maquina mais potente…