Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
cauecandeloro
Contributor III
Contributor III

Carga de Dados

Pessoal, bom dia.

Estou montando um projeto onde basicamente vou mostrar todos os indicadores relacionados a área de vendas da empresa.
Hoje, toda vez que vou gerar algum qvd com as informações, faço a leitura de todo o banco (a base não é absurdamente grande, então não leva tanto tempo).
O meu problema é que após virar um mês, as pessoas fazem alterações referentes ao mês anterior e quando atualizo os dados, o resultado de um mês já fechado é alterado.

Li alguns artigos sobre carga incremental, mas ainda não consegui pensar em uma forma de carregar apenas as informações do mês corrente, sem que essas informações sejam atualizadas quando o mês virar.

Alguém já passou por situação semelhante ?


Abs
Caue.

1 Solution

Accepted Solutions
Not applicable

Olha... eu fiz uma carga incremental da seguinte forma:

LET V_DATA_INI = '23/03/2013';

LET V_DATA_FIN = '23/04/2015'; //DayEnd( Today() );

DO WHILE V_DATA_INI <= V_DATA_FIN

LET V_ANO = Date( V_DATA_INI, 'YYYY' );

LET V_MES = Date( V_DATA_INI, 'MM' );

[TRANSACAO]:

LOAD CANAL,

    "NR_TRANSACAO",

    "NR_TRANSACAO" AS ID_TIPO_TRANSACAO,

    "DT_TRANSACAO",

    Year( DT_TRANSACAO )&Num( Month( DT_TRANSACAO ),'00')&Num( Day( DT_TRANSACAO ), '00' ) as ID_CALENDARIO,

    "CE_NR_TERMINAL",

    "CP_CE_CD_POSTOORIGEM",

    "CP_CE_CD_POSTOORIGEM" AS ID_POSTO,

    "CP_CE_CD_AGENCIAORIGEM",

    "CP_CE_CD_AGENCIAORIGEM" AS ID_AGENCIA,

    "TOTAL_TRANSACOES",

    "VL_DINHEIRO",

    "VL_CHEQUEMAIOR",

    "VL_CHEQUEMENOR";

SQL SELECT *

FROM "OWN_BI_AUT_PD"."TB_CONSOLIDADO_TRANSACAO_BI"

WHERE TO_CHAR(DT_TRANSACAO, 'YYYY') = $(V_ANO)

AND TO_CHAR(DT_TRANSACAO, 'MM') = $(V_MES);

LET V_ARQ = V_ANO&V_MES;

  STORE [TRANSACAO] into tabelas/TBE_TRANSACAO_$(V_ARQ).qvd;

  DROP Table [TRANSACAO];

LET V_DATA_INI = AddMonths( V_DATA_INI, 1 );

LOOP;

Com esse script eu fiz a carga total.. depois é só alterar as variáveis de "início e fim" pra serem apenas do mês corrente.

Na hora do LOAD você lê os arquivos da seguinte forma:

LOAD TRANSACAO.CANAL,

     TRANSACAO.NR_TRANSACAO,

     ID_TIPO_TRANSACAO,

     TRANSACAO.DT_TRANSACAO,

     ID_CALENDARIO,

     TRANSACAO.CE_NR_TERMINAL,

     TRANSACAO.CP_CE_CD_POSTOORIGEM,

     ID_POSTO,

     TRANSACAO.CP_CE_CD_AGENCIAORIGEM,

     ID_AGENCIA,

     TRANSACAO.TOTAL_TRANSACOES,

     TRANSACAO.VL_DINHEIRO,

     TRANSACAO.VL_CHEQUEMAIOR,

     TRANSACAO.VL_CHEQUEMENOR,

     if(WildMatch5(TRANSACAO.NR_TRANSACAO, 1, 2, 3, 4, 6, 8, 10, 12, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 39), 0, TRANSACAO.VL_DINHEIRO + TRANSACAO.VL_CHEQUEMAIOR + TRANSACAO.VL_CHEQUEMENOR) AS TRANSACAO.VALOR

FROM

(qvd);

Como ele está armazenando quebrado por mês e com a data no nome do arquivo, o "TBE_TRANSACAO*.qvd" na hora do LOAD vai carregar todos os arquivos.

View solution in original post

3 Replies
Not applicable

Olha... eu fiz uma carga incremental da seguinte forma:

LET V_DATA_INI = '23/03/2013';

LET V_DATA_FIN = '23/04/2015'; //DayEnd( Today() );

DO WHILE V_DATA_INI <= V_DATA_FIN

LET V_ANO = Date( V_DATA_INI, 'YYYY' );

LET V_MES = Date( V_DATA_INI, 'MM' );

[TRANSACAO]:

LOAD CANAL,

    "NR_TRANSACAO",

    "NR_TRANSACAO" AS ID_TIPO_TRANSACAO,

    "DT_TRANSACAO",

    Year( DT_TRANSACAO )&Num( Month( DT_TRANSACAO ),'00')&Num( Day( DT_TRANSACAO ), '00' ) as ID_CALENDARIO,

    "CE_NR_TERMINAL",

    "CP_CE_CD_POSTOORIGEM",

    "CP_CE_CD_POSTOORIGEM" AS ID_POSTO,

    "CP_CE_CD_AGENCIAORIGEM",

    "CP_CE_CD_AGENCIAORIGEM" AS ID_AGENCIA,

    "TOTAL_TRANSACOES",

    "VL_DINHEIRO",

    "VL_CHEQUEMAIOR",

    "VL_CHEQUEMENOR";

SQL SELECT *

FROM "OWN_BI_AUT_PD"."TB_CONSOLIDADO_TRANSACAO_BI"

WHERE TO_CHAR(DT_TRANSACAO, 'YYYY') = $(V_ANO)

AND TO_CHAR(DT_TRANSACAO, 'MM') = $(V_MES);

LET V_ARQ = V_ANO&V_MES;

  STORE [TRANSACAO] into tabelas/TBE_TRANSACAO_$(V_ARQ).qvd;

  DROP Table [TRANSACAO];

LET V_DATA_INI = AddMonths( V_DATA_INI, 1 );

LOOP;

Com esse script eu fiz a carga total.. depois é só alterar as variáveis de "início e fim" pra serem apenas do mês corrente.

Na hora do LOAD você lê os arquivos da seguinte forma:

LOAD TRANSACAO.CANAL,

     TRANSACAO.NR_TRANSACAO,

     ID_TIPO_TRANSACAO,

     TRANSACAO.DT_TRANSACAO,

     ID_CALENDARIO,

     TRANSACAO.CE_NR_TERMINAL,

     TRANSACAO.CP_CE_CD_POSTOORIGEM,

     ID_POSTO,

     TRANSACAO.CP_CE_CD_AGENCIAORIGEM,

     ID_AGENCIA,

     TRANSACAO.TOTAL_TRANSACOES,

     TRANSACAO.VL_DINHEIRO,

     TRANSACAO.VL_CHEQUEMAIOR,

     TRANSACAO.VL_CHEQUEMENOR,

     if(WildMatch5(TRANSACAO.NR_TRANSACAO, 1, 2, 3, 4, 6, 8, 10, 12, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 39), 0, TRANSACAO.VL_DINHEIRO + TRANSACAO.VL_CHEQUEMAIOR + TRANSACAO.VL_CHEQUEMENOR) AS TRANSACAO.VALOR

FROM

(qvd);

Como ele está armazenando quebrado por mês e com a data no nome do arquivo, o "TBE_TRANSACAO*.qvd" na hora do LOAD vai carregar todos os arquivos.

nicolett_yuri

Caue, é interessante você ler o capítulo que fala de carga incremental no manual do QlikView. Neste capítulo ele passa diversos exemplos de utilização.

Procure no manual por: Carga Incremental

cauecandeloro
Contributor III
Contributor III
Author

Obrigado Lucas...
Segui esse raciocínio e deu certo por aqui...

Abs
Caue.