Qlik Community

Qlik Brasil

Welcome to the group for Brazil users. .All discussions will be in Portuguese.

Highlighted
luizclaudio
Contributor

Criar nova tabela a partir de combinação de valores

Bom dia

Preciso criar uma tabela onde são gerados valores que são combinações de registros carregados de uma planilha no excel.

Tenho vários registros com uma determinada data e a leitura desses deverá gerar uma série de novas informações que preciso carregar em outra tabela.

Por exemplo: tenho 5 registros com uma mesma data. isso vai gerar 10 combinações entre os valores lidos na tabela principal.

Alguém sabe me dizer como fazer isso no script?

Grato

Tags (1)
1 Solution

Accepted Solutions
rvsilvestre
Contributor III

Re: Criar nova tabela a partir de combinação de valores

Se usar assim funciona:

SET comb = $(comb)&'|'&$(vFuncionario) ;

não precisa usar a função text() , e quanto ao erro no load da tabela traga a variável entre aspas simples assim:

load distinct

  '$(comb)' as Comb,

  '$(Dia_Escala)' as Dia

Resident Resultados

19 Replies
Partner
Partner

Re: Criar nova tabela a partir de combinação de valores

Luiz,

Ainda não ficou muito claro sua dúvida. Poderia postar um exemplo?

Abs.

Fabio Nakashigue

luizclaudio
Contributor

Re: Criar nova tabela a partir de combinação de valores

Desculpe Fábio... vamos lá

Tenho equipes de funcionários que variam nos grupos de trabalho.

Algo como:

  

DataFuncionario
18/08/20161
18/08/20162
18/08/20163
18/08/20164
18/08/2016

5

DataEquipe
18/08/20161-2-3
18/08/20161-2-4
18/08/20161-2-5
18/08/20161-3-4
18/08/20161-3-5
18/08/20161-4-5
18/08/20162-3-4
18/08/20162-3-5
18/08/20162-4-5
18/08/20163-4-5

Na primeira tabela tenho o pessoal disponível para uma determinada data. Nesse caso, 5 funcionários

Preciso gerar as combinações de equipes em outra tabela... No exemplo, são 10 combinações possíveis de equipe formada por 3 funcionários.

A primeira eu tenho uma planilha em excel.

A segunda eu preciso gerar e estou tentando fazer isso no script

Partner
Partner

Re: Criar nova tabela a partir de combinação de valores

Cara não consigo pensar em alguma solução nem função do próprio qlikview para o que você precisa.

rvsilvestre
Contributor III

Re: Criar nova tabela a partir de combinação de valores

Função própria do Qlik eu não achei aqui também... Eu faria da seguinte maneira:

1º - criaria 1 variável vFunc e traria o valor max de 'funcionários' (tem que ser um ID sequencial conforme o exemplo que vc postou) = 5,

2º - faria 3 FORs , criando 3 variáveis (a,b,c) , um FOR dentro do outro  (concatenando no final ) criando uma matriz.

3º - criaria condicionais no FOR do $(b) e $(c) , para evitar repetições , b > a (no FOR do $(b) )  e  c> b (no FOR do $(c))

4º - existe uma função comb(funcionarios,3) = 10 , usaria essa função para fazer uma validação comparando com o número de registros gerados.

* Isso considerando esse exemplo que vc postou, provavelmente são mais datas, então considere 4 FORs, sendo o primeiro para as datas...Fazendo um load de cada data por vez,criando vFunc com o ID max de funcionários e então os 3 FORs...

luizclaudio
Contributor

Re: Criar nova tabela a partir de combinação de valores

Bom dia Rodrigo

Obrigado pela ajuda, mas minha dúvida é onde incluir isso no script, pois terei que ler vários registros (enquanto for a mesma data) para ter os funcionários disponíveis naquele dia. Onde encaixo a rotina? Abaixo está a carga da tabela de escala.

LOAD Dia,

     weekday(Semana) as Semana,

    Funcionario

FROM

(ooxml, embedded labels, table is Resultados)

Re: Criar nova tabela a partir de combinação de valores

Luiz, esse código você precisa criar após a leitura da definição das escalas

luizclaudio
Contributor

Re: Criar nova tabela a partir de combinação de valores

Bom dia

Tentei com o seguinte código:

LOAD Dia,

     weekday(Semana) as Semana,

    Funcionario

FROM

(ooxml, embedded labels, table is Resultados)

for vRow = 1 to NoOfRows('Resultados')

  Dia_Escala = Dia;

  Equipe = '';

    do while Dia = Dia_Escala

     do while N <= 5

       Equipe= Equipe & Funcionario;

       N = N + 1;

     loop

  loop

  n = 1;

next

O problema é que o campo Funcionario não traz valor...

O que está errado?

Re: Criar nova tabela a partir de combinação de valores

Luiz, você precisa colocar o conteúdo do campo de sua tabela dentro das variáveis, por exemplo:

Dia_Escala = Dia;


O conteúdo Dia não possui nenhuma informação, pois você não declarou nenhum valor.


Um exemplo de como seria:

TabelaData:

LOAD

         Dia

From TabelaData.qvd (qvd);


for x = 0 to NoOfRows('TabelaData')-1


LET vDia = Peek('Dia', $(x), 'TabelaData');

TRACE O conteúdo da variável vDia é: $(vDia);


NEXT x;

rvsilvestre
Contributor III

Re: Criar nova tabela a partir de combinação de valores

tmp:

load

Date#(Data) as Data,

Funcionario

inline [

Data, Funcionario

18/08/2016, 1

18/08/2016, 2

18/08/2016, 3

18/08/2016, 4

18/08/2016, 5];

let vFunc = NoOfRows('tmp');

for a = 1 to $(vFunc)

  for b = $(a) + 1 to $(vFunc)

       for c = $(b) + 1 to $(vFunc)

  set vComb = $(a)&'|'&$(b)&'|'&$(c);

  trace $(vComb);

  tab_comb:

  load distinct

  $(vComb) as Comb ,

  Data

  resident tmp;

  next

  next

  next