Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
luizclaudio
Creator
Creator

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

Labels (1)
1 Solution

Accepted Solutions
Anonymous
Not applicable

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

View solution in original post

19 Replies
fabionakashigue
Partner - Creator
Partner - Creator

Luiz,

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

Abs.

Fabio Nakashigue

luizclaudio
Creator
Creator
Author

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

fabionakashigue
Partner - Creator
Partner - Creator

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

Anonymous
Not applicable

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
Creator
Creator
Author

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)

nicolett_yuri

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

luizclaudio
Creator
Creator
Author

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?

nicolett_yuri

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;

Anonymous
Not applicable

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