Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Socorro!

Bom dia,

Sou usuária nova no Qlik Sense, e preciso de uma ajuda urgente.

Preciso gerar um tabela, através de outra tabela já carregada.

Tenho os campos:

Nome ( indica o nome da pessoa), dia, dias de produção (onde 0 indica que a pessoa não trabalhou e 1 que trabalhou), e o grupo.

Na tabela que tenho que gerar, precisava fazer um loop para que todo vez que mudasse o nome ou o grupo ou  quando a pessoa não trabalhasse ( que é indicado pelo número 0) ela pegasse a data de inicio e fim desse período.

Vou tentar exemplificar genericamente, pois são muitos os meus dados

Tenho uma tabela parecida com esta carregada:

  

NomeDiaDias de ProduçãoGrupo
João12/12/20171Grupo 1
João12/12/20170-
João13/12/20171Grupo 1
João13/12/20171Grupo 1
João14/12/20171Grupo 2
Maria12/12/20170-
Maria12/12/20171Grupo 1
Maria14/12/20171Grupo 1
Maria14/12/20171Grupo 2
Maria14/12/20170-
Maria15/12/20171Grupo 1
Ana15/12/20171Grupo 1
Ana16/12/20171Grupo 1
Ana17/12/20170-
Ana18/12/20171Grupo 2

E através dela precisava gerar uma igual esta:

   

NomeData InícioData FimGrupo
João12/12/201712/12/2017Grupo 1
João13/12/204713/12/2017Grupo 1
João14/12/201714/12/2017Grupo 2
Maria12/12/201714/12/2017Grupo 1
Maria14/12/201714/12/2017Grupo 2
Maria15/12/201715/12/2017Grupo 1
Ana15/12/201716/12/2017Grupo 1
Ana18/12/201718/12/2017Grupo 2

Já pesquisei, mas ainda não achei nada por completo que me ajudasse.

E estou precisando urgentemente, se alguém pudesse me ajudar ficaria muito grata.

27 Replies
Anonymous
Not applicable
Author

Os meus registros seriam basicamente esses, peguei genericamente, porque são milhares:

    

NomeDiaDias ProdutividadeGrupoPorte
Maria29/08/20161Grupo 1M
Maria30/08/20161Grupo 1M
Maria31/01/20171Grupo 1M
Maria31/01/20171Grupo 2M
Maria02/02/20171Grupo 3P
Maria03/03/20171Grupo 3P
Maria04/03/20170Grupo 3P
Maria05/03/20171Grupo 3P
Maria05/03/20171Grupo 3G
Maria06/03/20171Grupo 3G
João07/03/20171Grupo 3G
João08/03/20170Grupo 4G
João09/03/20171Grupo 3G
João09/03/20171Grupo 3M

No fim a tabela teria que vim assim, observa-se que quando a pessoa tem folga, é como se parasse e contasse novamente uma data de início e fim.

   

NomeDia InicioDia FimGrupoPorte
Maria29/08/201631/01/2017Grupo 1M
Maria31/01/201731/01/2017Grupo 2M
Maria02/02/201703/03/2017Grupo 3P
Maria05/03/201705/03/2017Grupo 3P
Maria05/03/201706/03/2017Grupo 3G
João07/03/201707/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3

M

Conseguiu entender?

Você não sabe o quanto está me ajudando.

Muito obrigada. Todas desta comunidade são muito solícitos!

Thiago_Justen_

A resposta do Thiago das Chagas me parece o que você. Testei o script e funcionou conforme a descrição da sua necessidade.

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
srchagas
Creator III
Creator III

Bom Dia

e que como estou em outro pais fuso e diferente, mas vamos la o codigo que tu precisa

a unica diferenca que voce vai ver e do dia 04/04 que deixei como folga , se tu quiser quando a pessoa nao trabalhou, caso contrario voce filtra somente os trabalhados

/************************************************************************/

// 1 - Faco a leitura da Base Nao modelada

/************************************************************************/

Base_Modelada:

LOAD * INLINE [

Nome , Dia , Dias Produtividade , Grupo , Porte

Maria , 29/08/2016 , 1 , Grupo 1 , M

Maria , 30/08/2016 , 1 , Grupo 1 , M

Maria , 31/01/2017 , 1 , Grupo 1 , M

Maria , 31/01/2017 , 1 , Grupo 2 , M

Maria , 02/02/2017 , 1 , Grupo 3 , P

Maria , 03/03/2017 , 1 , Grupo 3 , P

Maria , 04/03/2017 , 0 , Grupo 3 , P

Maria , 05/03/2017 , 1 , Grupo 3 , P

Maria , 05/03/2017 , 1 , Grupo 3 , G

Maria , 06/03/2017 , 1 , Grupo 3 , G

João , 07/03/2017 , 1 , Grupo 3 , G

João , 08/03/2017 , 0 , Grupo 4 , G

João , 09/03/2017 , 1 , Grupo 3 , G

João , 09/03/2017 , 1 , Grupo 3 , M

];

/************************************************************************/

// 2 - Descobrir qual e o menor Data por grupo por pessoa

//

/************************************************************************/

Min_Data_Por_status:

LOAD

Min(Dia)  as  MinDtSituacaoPerDay,

Grupo,

Nome,

[Dias Produtividade],

Porte

Resident Base_Modelada

Group By

Grupo,

Nome,

[Dias Produtividade],

Porte

;

/************************************************************************/

// 3 - Descobrir qual e o maior horario por Equipamento

//    e e por Status

/************************************************************************/

Max_Data_Por_status:

LOAD

Max(Dia)   as  MaxDtSituacaoPerDay,

Grupo,

Nome,

[Dias Produtividade],

Porte

Resident Base_Modelada

Group By

Grupo,

Nome,

[Dias Produtividade],

Porte

;

/************************************************************************/

// 4 -  Crio uma tabela somente com Status e ATM para fazer

//      a modelagem final

/************************************************************************/

BaseModeladaFinal:

NoConcatenate

LOAD Distinct

Nome,

Grupo,

Porte

Resident Base_Modelada

;

DROP Table Base_Modelada;

/************************************************************************/

// 5 -  Faco o Join  para tabela somente na tabela com status

//      assim trago o menor para a tabela final

/************************************************************************/

Left Join (BaseModeladaFinal)

LOAD

  Grupo,

Nome,

[Dias Produtividade],

Porte,

MinDtSituacaoPerDay as DtInicialStatus

Resident Min_Data_Por_status;

DROP Table  Min_Data_Por_status;

/************************************************************************/

// 6 -  Faco o Join  para tabela somente na tabela com status

//      assim trago o maior para a tabela final

/************************************************************************/

Left Join(BaseModeladaFinal)

LOAD

  Grupo,

Nome,

[Dias Produtividade],

Porte,

MaxDtSituacaoPerDay as DtFinalStatus

Resident Max_Data_Por_status

;

DROP Table  Max_Data_Por_status;

Ajustado:

LOAD

*,

if( [Dias Produtividade]  = 0 , 'Folga','Trabalhado') as Status

Resident BaseModeladaFinal;

DROP Table BaseModeladaFinal;

Resultado :

Nome Grupo DtInicialStatus DtFinalStatus Status Porte
MariaGrupo 129/08/201631/01/2017TrabalhadoM
MariaGrupo 231/01/201731/01/2017TrabalhadoM
MariaGrupo 304/03/201704/03/2017FolgaP
MariaGrupo 302/02/201705/03/2017TrabalhadoP
MariaGrupo 305/03/201706/03/2017TrabalhadoG
JoãoGrupo 307/03/201709/03/2017TrabalhadoG
JoãoGrupo 309/03/201709/03/2017TrabalhadoM
JoãoGrupo 408/03/201708/03/2017FolgaG
Anonymous
Not applicable
Author

Oi Thiago,

Bom dia!

é que nesse Scrip ainda encontro o problema que não está descontando o dia da folga.

Por exemplo. A maria folgou fia 04/03/2017 no grupo 3, porte P.

Então eu precisava que esse dia não fosse contato período de tempo nessa tabela. Porque depois eu vou precisar desses dias para fazer contas. Ai por exemplo, pra Maria, no grupo 3 no porte 3 ela trabalhou 3 dias.

De acordo com essa tabela olhando DtInicialStatus e DtFinalStatus ele trabalhou 4 dias.

Por isso, a tabela dos dias trabalhados tinha que ficar assim:

NomeDia InicioDia FimGrupoPorte
Maria29/08/201631/01/2017Grupo 1M
Maria31/01/201731/01/2017Grupo 2M
Maria02/02/201703/03/2017Grupo 3P
Maria05/03/201705/03/2017Grupo 3P
Maria05/03/201706/03/2017Grupo 3G
João07/03/201707/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3

M

Consigo fazer isso?

Muito obrigada!

Anonymous
Not applicable
Author

Oi srchagas‌, boa tarde!

Desculpa o incomodo, seu scrip foi bastante útil.

Mas ainda não consegui resolver um detalhe, como descrevi abaixo.

E não faço ideia de como fazer isso. Será que conseguiria me ajudar?

Desde já, fico completamente agradecida pela atenção!

Anonymous
Not applicable
Author

Não sei se descrevi bem o meu problema, mas é como se precisasse fazer um loop e cada vez que mudasse ou o nome, ou data, ou o grupo ou o porte ou mudasse de 0 para 1 e vice versa (o que ainda não consegui encaixar nesses scrips acima).

Precisaria parar e registrar aquele nome, aquele data de fim, aquele grupo e aquele porte. E assim Sucessivamente. Começaria anotando o próximo nome, o próximo grupo, a data, o próximo porte, até que alguma dessas variáveis mudasse novamente. E assim sucessivamente, até o fim dos meus dados. Formando uma tabela que exemplifiquei acima.

Alguém conseguiria me ajudar?

srchagas
Creator III
Creator III

Meu script faz isso , ele marca todas as mudanças de grupo pq ele simplesmente verifica as maiores e menores entrada da pessoa por dia e por grupo

Então a se a pessoa muda de grupo funciona o que não entendi é o que está faltando aí sinceridade

Anonymous
Not applicable
Author

Oi Thiago,

Rodei o seu scrip e ele me deu exatamente essa tabela:

 

NomeDtInicialStatusDtFinalStatusGrupoPorteStatus
João07/03/201709/03/2017Grupo 3GTrabalhado
João09/03/201709/03/2017Grupo 3MTrabalhado
João08/03/201708/03/2017Grupo 4GFolga
Maria29/08/201631/01/2017Grupo 1MTrabalhado
Maria31/01/201731/01/2017Grupo 2MTrabalhado
Maria04/03/201704/03/2017Grupo 3PFolga
Maria02/02/201705/03/2017Grupo 3PTrabalhado
Maria05/03/201706/03/2017Grupo 3GTrabalhado

Vamos pegar o exemplo da MARIA No grupo 3 P. Ela trabalho no dia 2,3. Folgou dia 4 e voltou trabalhar dia 5.

Eu sei que nesta tabela eu tenho que ela folgou dia 4. Mas pelo data de Iniíco e de Fim do Grupo 3 P, é como se ela tivesse iniciado dia 2 e terminado dia 5.

Filtrando somente o status trabalhado é Como se ela tivesse trabalhado  4 dias, quando na verdade trabalhou apenas 3.

Eu precisaria que esse grupo 3 P fosse dividido em 2. Eu nem preciso saber o dia que ela folgou. Mas precisaria para esse exemplo que a Maria no grupo 3 P tivesse dois registro para os dias trabalhados:

Maria02/02/201703/03/2017Grupo 3P
Maria05/03/201705/03/2017Grupo 3P

Entendeu?

Como se cada dia de folga também fosse um pausa. Ou seja, um  mesmo grupo, de uma mesa pessoa, de um mesmo porte, teria mais de um registro na tabela caso tivesse uma folga no período.

Para esses dados eu precisaria uma tabela de dias trabalhados final assim (essa tabela so tem os dias trabalhados):

NomeDia InicioDia FimGrupoPorte
Maria29/08/201631/01/2017Grupo 1M
Maria31/01/201731/01/2017Grupo 2M
Maria02/02/201703/03/2017Grupo 3P
Maria05/03/201705/03/2017Grupo 3P
Maria05/03/201706/03/2017Grupo 3G
João07/03/201707/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3G
João09/03/201709/03/2017Grupo 3

M

Não sei se conseguir transmitir bem a minha idéia. rsrs

Mas Será que é possível fazer isso no qlik?

Muito Obrigada por tentar me ajudar srchagas!

srchagas
Creator III
Creator III

Entendi o problema , eu estava viajando e so voltei hoje, assim que conseguir finalizar os teste lhe mando

Anonymous
Not applicable
Author

Muito obrigada Thiago!