Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
lailarhc
Creator
Creator

Mostrar em uma tabela valores que só aparecem uma vez, mesmo com mais valores selecionados no filtro

Olá.
Sinto muito se o título é confuso. Vou tentar explicar melhor no corpo do texto.
Eu tenho uma tabela que só mostrar os servidores que não fizeram nenhum curso (um servidor que não fez nenhum curso só aparece uma vez) se tal servidor estiver selecionado no filtro.

02.png

Eu preciso que essa tabela continue mostrando apenas servidores que não fizeram curso nenhum mesmo que mais servidores estejam selecionados. Mas quando seleciono vários servidores, de acordo com a condição de cálculo (não sei se o nome do campo é esse, estou traduzindo ao pé da letra do inglês), nada aparece na tabela.

Por exemplo:

03.png

A tabela ainda deveria mostrar o funcionário da primeira imagem, listando ele como o único funcionário selecionado que não fez nenhum curso (ou seja, que só aparece uma única vez).

 

Aqui está a expressão da minha tabela:

=Aggr(Only({$ <Servidor = {"= Count(Servidor) = 1"}>} Servidor), Servidor)

 

Aqui está o que coloquei no campo de cálculo de condição, que aparece na imagem seguinte:

GetFieldSelections(Servidor) = Aggr(Only({$ <Servidor = {"= Count(Curso) = 1"}>} Servidor), Servidor)

04.png

 

Como posso conseguir o que quero?
Agradeço antecipadamente.

Labels (3)
1 Solution

Accepted Solutions
lailarhc
Creator
Creator
Author

Eu resolvi utilizando um outer join com as duas tabelas.
Meu script ficou deste jeito:

LIB CONNECT TO 'anatelbdro01 - D-1 de produção';

NullAsValue *;

Set Nullvalue = '';

LOAD Servidor,
Início,
Fim,
Horas,
Curso;
[cursos]:
SQL SELECT NomeEmpregado as Servidor,
evento."DataIniRealizacao" as Início,
evento."DataFimRealizacao" as Fim,
evento."CargaHoraria" as Horas,
evento."descEvento" as Curso
FROM SARH.dbo.Empregado
LEFT JOIN SDTA.dbo."V_AuditoriaEventoServidor" as evento
ON evento.numCpf = Empregado.NumCpf
LEFT JOIN SARH.dbo.DadosFuncionais as dados
ON dados.CodEmpregado = Empregado.CodEmpregado
JOIN SARH.dbo.Orgao as orgao
ON orgao.CodOrgao = dados.CodUltimaLotacao
AND orgao.SiglaOrgao LIKE 'GR08%'
WHERE dados.DataSaidaEmpregado is null

UNION

SELECT NomeEmpregado as Servidor,
capacitacao."DataInicio" as Início,
capacitacao."DataFim" as Fim,
capacitacao."CargaHoraria" as Horas,
capacitacao."descTitulo" as Curso
FROM SARH.dbo.Empregado
LEFT JOIN SDTA.dbo."SHC_CapacitacaoNaoInstitucional" as capacitacao
ON capacitacao.CodEmpregado = Empregado.CodEmpregado
LEFT JOIN SARH.dbo.DadosFuncionais as dados
ON dados.CodEmpregado = Empregado.CodEmpregado
JOIN SARH.dbo.Orgao as orgao
ON orgao.CodOrgao = dados.CodUltimaLotacao
AND orgao.SiglaOrgao LIKE 'GR08%'
WHERE dados.DataSaidaEmpregado is null;


outer Join(cursos)
LOAD
[Titulos],
[Servidor]
FROM [lib://AttachedFiles/Indicação de cursos_2.xlsx]
(ooxml, embedded labels, table is Planilha2);

Agora eu tenho uma única tabela onde todos os valores nulos são tratados com uma string vazia.

View solution in original post

3 Replies
RafaMartins
Creator II
Creator II

Boa tarde, dependendo de como está seu campo que traz a informação se o servidor possui curso ou não você pode fazer com um if

Caso o campo só tenha valor onde o funcionário tenha curso e os que não tem fique em branco, você pode usar

if(Cursos<0,Servidor)

Nesse caso na tabela só seria retornado servidores que não possuem curso, caso seu campo seja uma flag podemos seguir a mesma logica

if(Cursos='Não',Servidor)

lailarhc
Creator
Creator
Author

Olá.
O que acontece é que eu uni duas tabelas diferentes ambas as quais contém informação sobre cursos que funcionários fizeram. O resultado é que agora eu tenho linhas onde o valor do curso é nulo para um funcionário e não nulo para o mesmo funcionário.

Deixa eu ilustrar com um exemplo:
05.png

O funcionário listado possuía cursos em uma das tabelas e na outra estava listado como não tendo cursos.
O resultado é que agora ele ao mesmo tempo que possui cursos, tem uma entrada com valor nulo (que eu converti para uma string vazia) na coluna de cursos.

Por este motivo, os funcionários que realmente não possuem curso nenhum aparecem apenas uma única vez, com a coluna de curso vazia.

Por isso não posso simplesmente usar a solução de if(Curso = ' ', Servidor)

lailarhc
Creator
Creator
Author

Eu resolvi utilizando um outer join com as duas tabelas.
Meu script ficou deste jeito:

LIB CONNECT TO 'anatelbdro01 - D-1 de produção';

NullAsValue *;

Set Nullvalue = '';

LOAD Servidor,
Início,
Fim,
Horas,
Curso;
[cursos]:
SQL SELECT NomeEmpregado as Servidor,
evento."DataIniRealizacao" as Início,
evento."DataFimRealizacao" as Fim,
evento."CargaHoraria" as Horas,
evento."descEvento" as Curso
FROM SARH.dbo.Empregado
LEFT JOIN SDTA.dbo."V_AuditoriaEventoServidor" as evento
ON evento.numCpf = Empregado.NumCpf
LEFT JOIN SARH.dbo.DadosFuncionais as dados
ON dados.CodEmpregado = Empregado.CodEmpregado
JOIN SARH.dbo.Orgao as orgao
ON orgao.CodOrgao = dados.CodUltimaLotacao
AND orgao.SiglaOrgao LIKE 'GR08%'
WHERE dados.DataSaidaEmpregado is null

UNION

SELECT NomeEmpregado as Servidor,
capacitacao."DataInicio" as Início,
capacitacao."DataFim" as Fim,
capacitacao."CargaHoraria" as Horas,
capacitacao."descTitulo" as Curso
FROM SARH.dbo.Empregado
LEFT JOIN SDTA.dbo."SHC_CapacitacaoNaoInstitucional" as capacitacao
ON capacitacao.CodEmpregado = Empregado.CodEmpregado
LEFT JOIN SARH.dbo.DadosFuncionais as dados
ON dados.CodEmpregado = Empregado.CodEmpregado
JOIN SARH.dbo.Orgao as orgao
ON orgao.CodOrgao = dados.CodUltimaLotacao
AND orgao.SiglaOrgao LIKE 'GR08%'
WHERE dados.DataSaidaEmpregado is null;


outer Join(cursos)
LOAD
[Titulos],
[Servidor]
FROM [lib://AttachedFiles/Indicação de cursos_2.xlsx]
(ooxml, embedded labels, table is Planilha2);

Agora eu tenho uma única tabela onde todos os valores nulos são tratados com uma string vazia.