Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
tiagopazeto
New Contributor III

Crosstable quebra de linhas

Olá pessoal.

Preciso realizar a carga dos obituários contidos no link abaixo, porém não consegui ter idéias para construir a carga incremental (dados são atualizados todos os dias ou na semana). Já usei crosstable para outros projetos, no entanto neste caso o número de linhas para cada pessoa pode mudar.

http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx

Desde já agradeço atenção de todos.

Abraços.

Tags (1)
1 Solution

Accepted Solutions
Employee
Employee

Re: Crosstable quebra de linhas

Versão mais simples do script (depois de umas horas de sono), rss

Tabela:

LOAD @1,

     @2,

    RowNo() AS Indice

FROM

[http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx](html, unicode, no labels, table is @1)

where Len(@1)>0;

Esparsa:

load

Indice,

if(@1='Nome:',AutoNumberHash128(@2,Indice),Peek('Chave')) as Chave,

If(@1='Nome:',@2) as [Nome],

If(@1='Data do Falecimento:',@2) as [Data do Falecimento],

If(@1='Idade:',@2) as [Idade] ,

If(@1='Profissão:',@2) as [Profissão] ,

If(@1='Nome do Pai:',@2) as [Nome do Pai] ,

If(@1='Nome da Mãe:',@2) as [Nome da Mãe] ,

If(@1='Cônjuge:',@2) as [Cônjuge] ,

If(@1='Número da FAF:',@2) as [Número da FAF] ,

If(@1='Local do Falecimento:',@2) as [Local do Falecimento] ,

If(@1='Local do Velório:',@2) as [Local do Velório] ,

If(@1='Local do Sepultamento:',@2) as [Local do Sepultamento] ,

If(@1='Data do Sepultamento:',@2) as [Data do Sepultamento] ,

If(@1='Funerária:;',@2) as [Funerária]

Resident Tabela

Order by Indice;

drop Table Tabela;

final:

NoConcatenate

load

Hash128(Chave,MinString(Nome),MinString("Data do Falecimento"),Minstring("Nome da Mãe")) as ChaveGeral,

Chave as ChaveDia,

Minstring("Cônjuge") as "Cônjuge",

Minstring("Data do Falecimento") as "Data do Falecimento",

Minstring("Data do Sepultamento") as "Data do Sepultamento",

Minstring("Funerária") as "Funerária",

Minstring("Idade") as "Idade",

Minstring("Local do Falecimento") as "Local do Falecimento",

Minstring("Local do Sepultamento") as "Local do Sepultamento",

Minstring("Local do Velório") as "Local do Velório",

Minstring("Nome") as "Nome",

Minstring("Nome da Mãe") as "Nome da Mãe",

Minstring("Nome do Pai") as "Nome do Pai",

Minstring("Número da FAF") as "Número da FAF",

Minstring("Profissão") as "Profissão"

resident Esparsa

Group by Chave;

Drop Table Esparsa;

If FileSize('falecimentos.qvd')>0 then

Concatenate(final)

load * From falecimentos.qvd(qvd) Where not Exists(ChaveGeral);

endif;

Store final into falecimentos.qvd(qvd);

9 Replies
Employee
Employee

Re: Crosstable quebra de linhas

Bom dia Tiago,

  Com certeza terás que fazer um belo trabalho de validação de dados incrementais e crosstable, além da limpeza de registros.

  Dê uma lida nestes artigos para auxiliar ser desenvolvimento

Utilizando Cargas Parciais - Qknow

http://mundoqlik.com/carga-incremental-en-qlikview-parte-1

tiagopazeto
New Contributor III

Re: Crosstable quebra de linhas

Ricardo,

Obrigado pela resposta, vou dar uma olhada nos links que você passou.

Acho que meu maior trabalho será quanto ao crosstable mesmo. E bem por isto que vim buscar ajuda dos experts da comunidade.

Obrigado.

Abraços.

eduardo_dimperi
Valued Contributor II

Re: Crosstable quebra de linhas

Oi Tiago,

Porque é necessário utilizar cross table. Os dados não são enviados nessa padrão chave/valor pra ti?

Employee
Employee

Re: Crosstable quebra de linhas

Com certeza, a disposição.

Atuei em uma demanda similar um tempo atrás em que fazia a recarga dos dados frequentemente e descartava os dados, pois era mais produtivo do que desenvolver lógicas mais complexas, com recargas diárias ou até a perda de registros.

Segue também o documento com exemplos em relação ao Crosstable

Crosstable ‒ QlikView

Chegaste a perguntar se eles possuem alguma api ou conexão para request destes dados?

tiagopazeto
New Contributor III

Re: Crosstable quebra de linhas

Oi Eduardo,

Na verdade foi a ideia que tive para transpor as linhas em colunas, mas se tiver outra ideia te agradeço.

Obrigado.

Abraços.

Employee
Employee

Re: Crosstable quebra de linhas

Ficou meio longo o script, mas fez a carga e o incremental.

Seguem

Employee
Employee

Re: Crosstable quebra de linhas

Versão mais simples do script (depois de umas horas de sono), rss

Tabela:

LOAD @1,

     @2,

    RowNo() AS Indice

FROM

[http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx](html, unicode, no labels, table is @1)

where Len(@1)>0;

Esparsa:

load

Indice,

if(@1='Nome:',AutoNumberHash128(@2,Indice),Peek('Chave')) as Chave,

If(@1='Nome:',@2) as [Nome],

If(@1='Data do Falecimento:',@2) as [Data do Falecimento],

If(@1='Idade:',@2) as [Idade] ,

If(@1='Profissão:',@2) as [Profissão] ,

If(@1='Nome do Pai:',@2) as [Nome do Pai] ,

If(@1='Nome da Mãe:',@2) as [Nome da Mãe] ,

If(@1='Cônjuge:',@2) as [Cônjuge] ,

If(@1='Número da FAF:',@2) as [Número da FAF] ,

If(@1='Local do Falecimento:',@2) as [Local do Falecimento] ,

If(@1='Local do Velório:',@2) as [Local do Velório] ,

If(@1='Local do Sepultamento:',@2) as [Local do Sepultamento] ,

If(@1='Data do Sepultamento:',@2) as [Data do Sepultamento] ,

If(@1='Funerária:;',@2) as [Funerária]

Resident Tabela

Order by Indice;

drop Table Tabela;

final:

NoConcatenate

load

Hash128(Chave,MinString(Nome),MinString("Data do Falecimento"),Minstring("Nome da Mãe")) as ChaveGeral,

Chave as ChaveDia,

Minstring("Cônjuge") as "Cônjuge",

Minstring("Data do Falecimento") as "Data do Falecimento",

Minstring("Data do Sepultamento") as "Data do Sepultamento",

Minstring("Funerária") as "Funerária",

Minstring("Idade") as "Idade",

Minstring("Local do Falecimento") as "Local do Falecimento",

Minstring("Local do Sepultamento") as "Local do Sepultamento",

Minstring("Local do Velório") as "Local do Velório",

Minstring("Nome") as "Nome",

Minstring("Nome da Mãe") as "Nome da Mãe",

Minstring("Nome do Pai") as "Nome do Pai",

Minstring("Número da FAF") as "Número da FAF",

Minstring("Profissão") as "Profissão"

resident Esparsa

Group by Chave;

Drop Table Esparsa;

If FileSize('falecimentos.qvd')>0 then

Concatenate(final)

load * From falecimentos.qvd(qvd) Where not Exists(ChaveGeral);

endif;

Store final into falecimentos.qvd(qvd);

tiagopazeto
New Contributor III

Re: Crosstable quebra de linhas

Clever, ficou ótimo!

Muito obrigado.

tiagopazeto
New Contributor III

Re: Crosstable quebra de linhas

Por fim, o título inicial (era o que achei que resolveria) ficou bem diferente da solução do Clever, então vou colocar algumas tags que possam ajudar dúvidas futuras.

Carga de link da web

Mesmo registros em linhas distintas