Qlik Community

Qlik Sense App Development

Discussion board where members can learn more about Qlik Sense App Development and Usage.

Announcements
BARC’s The BI Survey 19 makes it official. BI users love Qlik. GET REPORT
bmelodesouza
New Contributor

Working with QVD files to generate odag aplications based on date filters

Hi everybody,

I´m a new member here and I really need help. I´ve create apps to generate ODAG visualizations. This moment I have 2 apps: Consolidate.qvf and Details.qvf. Consolidate is the base app and Details is the app which contains the odag generator script. The client has on his data base, some QVD files from dezember/2015 to august/2018. All these files have informations about the month sales. They are like this: 201807_MARGIN_DAY.QVD

When I use the date filter on the Consolidate app, the odag generator script should select the file on the directory corresponding to the date and create the odag aplication, but instead, the odag generator script on Consolidate looks for the date selected in all files and this takes to much time to finish.

Is there anyway to do that without looking for the informations in all files? I mean, if I choose the date: 07/31/2018 using the date filter, the odag generator script should look for the information on the QVD file corresponding to the right date (201807_MARGIN_DAY.QVD) instead of all the QVD´s inside the directory. I´ve already tried many ways to do that but without successful.


Could you help me guys?


Thank you...

2 Replies
MVP
MVP

Re: Working with QVD files to generate odag aplications based on date filters

Yes - the flexibility that you can write the generator script any way you want makes this possible. Could you please share your load script - then it is possible for us to help you.

bmelodesouza
New Contributor

Re: Working with QVD files to generate odag aplications based on date filters

Hi Petter good morning,

This the Details.qvf load script to generate odag:


SUB ExtendWhere(Name, ValVarName)

  LET T = Name & '_COLNAME';

  TRACE $(T);

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF len(Values) > 0 THEN

               IF len(WHERE_PART) > 0 THEN

               LET WHERE_PART = '$(WHERE_PART) AND Match($(ColName),  $(Values) )';

              

    ELSE

               LET WHERE_PART = ' WHERE Match($(ColName),  $(Values) )';

    ENDIF

  ENDIF

END SUB;

SUB ExtendWhere2(Name, ValVarName)

  LET T = Name & '_COLNAME';

  TRACE $(T);

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF len(Values) > 0 THEN

               IF len(WHERE_PART2) > 0 THEN

               LET WHERE_PART2 = '$(WHERE_PART2) AND Match($(ColName),  $(Values) )';

              

    ELSE

               LET WHERE_PART2 = ' WHERE Match($(ColName),  $(Values) )';

    ENDIF

  ENDIF

END SUB;

SUB ExtendWhere3(Name, ValVarName)

  LET T = Name & '_COLNAME';

  TRACE $(T);

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF len(Values) > 0 THEN

              IF len(WHERE_PART3) > 0 THEN

              LET WHERE_PART3 = '$(WHERE_PART3) AND Match($(ColName),  $(Values) )';

              

    ELSE

               LET WHERE_PART3 = ' WHERE Match($(ColName),  $(Values) )';

    ENDIF

  ENDIF

END SUB;

SUB ExtendWhere4(Name, ValVarName)

  LET T = Name & '_COLNAME';

  TRACE $(T);

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF len(Values) > 0 THEN

              IF len(WHERE_PART4) > 0 THEN

              LET WHERE_PART4 = '$(WHERE_PART4) AND Match($(ColName),  $(Values) )';

              

    ELSE

               LET WHERE_PART4 = ' WHERE Match($(ColName),  $(Values) )';

    ENDIF

  ENDIF

END SUB;

SUB ExtendWhere5(Name, ValVarName)

  LET T = Name & '_COLNAME';

  TRACE $(T);

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF len(Values) > 0 THEN

              IF len(WHERE_PART5) > 0 THEN

              LET WHERE_PART5 = '$(WHERE_PART5) AND Match($(ColName),  $(Values) )';

              

    ELSE

               LET WHERE_PART5 = ' WHERE Match($(ColName),  $(Values) )';

    ENDIF

  ENDIF

END SUB;

SUB BuildValueList(VarName, TableName, ColName, QuoteChrNum)

  IF $(QuoteChrNum) = 0 THEN

    LET LOADEXPR = 'Concat($(ColName),' & chr(39) & ',' & chr(39) & ') AS CombinedData';

  ELSE

    LET CHREXPR = ' chr(' & '$(QuoteChrNum)' & ') ';

    LET LOADEXPR = 'Concat( $(CHREXPR) & $(ColName) & $(CHREXPR)' & ',' & chr(39) & ',' & chr(39) & ') AS CombinedData';

  ENDIF

  _TempTable:

  LOAD $(LOADEXPR) Resident $(TableName);

  Let vNoOfRows = NoOfRows('_TempTable');

  IF $(vNoOfRows)> 0 THEN

    LET $(VarName) = Peek('CombinedData',0,'_TempTable');

  ENDIF

  drop table _TempTable;

  drop table '$(TableName)';

END SUB;

SET FilialDESCRICAO = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_FilialDESCRICAO){"quote": "", "delimiter": ""}

];

SET FilialDESCRICAO_COLNAME='FilialDESCRICAO';

CALL BuildValueList('FilialDESCRICAO', 'OdagBinding', 'VAL', 39);

SET FililESTADO = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_FililESTADO){"quote": "", "delimiter": ""}

];

SET FililESTADO_COLNAME='FililESTADO';

CALL BuildValueList('FililESTADO', 'OdagBinding', 'VAL', 39);

SET FilialSUPERVISOR_DESCR_FILHO2 = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_FilialSUPERVISOR_DESCR_FILHO2){"quote": "", "delimiter": ""}

];

SET FilialSUPERVISOR_DESCR_FILHO2_COLNAME='FilialSUPERVISOR_DESCR_FILHO2';

CALL BuildValueList('FilialSUPERVISOR_DESCR_FILHO2', 'OdagBinding', 'VAL', 39);

SET ProdutoNOME_NO_FILHO1 = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_ProdutoNOME_NO_FILHO1){"quote": "", "delimiter": ""}

];

SET ProdutoNOME_NO_FILHO1_COLNAME='ProdutoNOME_NO_FILHO1';

CALL BuildValueList('ProdutoNOME_NO_FILHO1', 'OdagBinding', 'VAL', 39);

SET ProdutoNOME_NO_FILHO2 = ;

SET ProdutoNOME_NO_FILHO2 = $(odso_ProdutoNOME_NO_FILHO2);

SET ProdutoNOME_NO_FILHO2_COLNAME='ProdutoNOME_NO_FILHO2';

SET ProdutoNOME_NO_FILHO2 = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_ProdutoNOME_NO_FILHO2){"quote": "", "delimiter": ""}

];

SET ProdutoNOME_NO_FILHO2_COLNAME='ProdutoNOME_NO_FILHO2';

CALL BuildValueList('ProdutoNOME_NO_FILHO2', 'OdagBinding', 'VAL', 39);

SET %DataID = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_%DataID){"quote": "", "delimiter": ""}

];

SET %DataID_COLNAME='%DataID';

CALL BuildValueList('%DataID', 'OdagBinding', 'VAL', 39);

SET arquivo = ;

OdagBinding:

LOAD * INLINE [

VAL

$(odso_arquivo){"quote": "", "delimiter": ""}

];

SET arquivo_COLNAME='arquivo';

CALL BuildValueList('arquivo', 'OdagBinding', 'VAL', 39);

SET WHERE_PART = '';

SET WHERE_PART2 = '';

SET WHERE_PART3 = '';

SET WHERE_PART4 = '';

SET WHERE_PART5 = '';

SUB ExtendQVDWhere(Name, ValVarName)

  LET T = Name & '_COLNAME';

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF (len(Values) > 0) THEN

        IF len(WHERE_PART) > 0 THEN

        LET WHERE_PART = '$(WHERE_PART) AND mixmatch([$(ColName)],$(Values) )';

    ELSE

        LET WHERE_PART = 'WHERE mixmatch([$(ColName)],$(Values))';

    ENDIF

  ENDIF

END SUB;

SUB ExtendQVDWhere2(Name, ValVarName)

  LET T = Name & '_COLNAME';

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF (len(Values) > 0) THEN

        IF len(WHERE_PART2) > 0 THEN

        LET WHERE_PART2 = '$(WHERE_PART2) AND mixmatch([$(ColName)],$(Values) )';

    ELSE

        LET WHERE_PART2 = 'WHERE mixmatch([$(ColName)],$(Values))';

    ENDIF

  ENDIF

END SUB;

SUB ExtendQVDWhere3(Name, ValVarName)

  LET T = Name & '_COLNAME';

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF (len(Values) > 0) THEN

        IF len(WHERE_PART3) > 0 THEN

        LET WHERE_PART3 = '$(WHERE_PART3) AND mixmatch([$(ColName)],$(Values) )';

    ELSE

        LET WHERE_PART3 = 'WHERE mixmatch([$(ColName)],$(Values))';

    ENDIF

  ENDIF

END SUB;

SUB ExtendQVDWhere4(Name, ValVarName)

  LET T = Name & '_COLNAME';

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF (len(Values) > 0) THEN

        IF len(WHERE_PART4) > 0 THEN

        LET WHERE_PART4 = '$(WHERE_PART4) AND mixmatch([$(ColName)],$(Values) )';

    ELSE

        LET WHERE_PART4 = 'WHERE mixmatch([$(ColName)],$(Values))';

    ENDIF

  ENDIF

END SUB;

SUB ExtendQVDWhere5(Name, ValVarName)

  LET T = Name & '_COLNAME';

  LET ColName = $(T);

  LET Values = $(ValVarName);

  IF (len(Values) > 0) THEN

        IF len(WHERE_PART5) > 0 THEN

        LET WHERE_PART5 = '$(WHERE_PART5) AND mixmatch([$(ColName)],$(Values) )';

    ELSE

        LET WHERE_PART5 = 'WHERE mixmatch([$(ColName)],$(Values))';

    ENDIF

  ENDIF

END SUB;

FOR EACH fldname IN 'FilialDESCRICAO', 'FililESTADO', 'FilialSUPERVISOR_DESCR_FILHO2'

  LET vallist = $(fldname);

  IF (IsNull(vallist)) THEN

  LET vallist = '';

  ENDIF

  IF len(vallist) > 0 THEN

    CALL ExtendQVDWhere('$(fldname)','vallist');

  ENDIF

NEXT fldname

TRACE Generated WHERE clause: ;

TRACE $(WHERE_PART);

FOR EACH fldname IN 'ProdutoNOME_NO_FILHO1', 'ProdutoNOME_NO_FILHO2'

  LET vallist = $(fldname);

  IF (IsNull(vallist)) THEN

  LET vallist = '';

  ENDIF

  IF len(vallist) > 0 THEN

    CALL ExtendQVDWhere2('$(fldname)','vallist');

  ENDIF

NEXT fldname

TRACE Generated WHERE clause: ;

TRACE $(WHERE_PART2);

FOR EACH fldname IN '%DataID'

  LET vallist = ($(fldname));

  IF (IsNull(vallist)) THEN

  LET vallist = '';

  ENDIF

  IF len(vallist) > 0 THEN

    CALL ExtendQVDWhere3('$(fldname)','vallist');

  ENDIF

NEXT fldname

TRACE Generated WHERE clause: ;

TRACE $(WHERE_PART3);

FOR EACH fldname IN 'arquivo'

LET vallist =  $(fldname);

  vArq=vallist;

  vPath='lib://MARGEM (dpsp_qlikview.user)/'&$(vArq);

  MARGEM: 

Load

    %ProdutoID,

    %FilialID,

    %DataID,

    SUM(QTD) AS QTD,

    SUM(VENDA) AS VENDA

FROM [lib://MARGEM (dpsp_qlikview.user)/2018*_MARGEM_DAY.QVD]

//[lib://MARGEM (dpsp_qlikview.user)/$(vArq)]

(qvd)

$(WHERE_PART3)

Group By

%ProdutoID,

%FilialID,

%DataID;

 

NEXT fldname

TRACE Generated WHERE clause: ;

TRACE $(WHERE_PART5);

//LOADING TABLES

FILIAL:

LOAD

    %FilialID,

    FilialBUSINESS_UNIT,

    FilialLOCATION,

    FilialTIPO,

    FilialREDE,

    FilialREDE2,

    FilialMATURIDADE2,

    FilialMATURIDADE,

    FilialMESMAS_LOJAS,

    FilialMESMAS_LOJAS2,

    FilialBUSINESS_UNIT_NOVA,

    FilialBU_UNIT,

    FilialTIPO_DE_FILIAL,

    FilialTIPO_DE_FILIAL_ANTES,

    FilialDESCR_CURTA_TIPO_FILIAL,

    FilialCALENDARIO,

    FilialDPSP_PRV_RDF_FLG,

    FilialDESCRICAO,

    FilialDT_ABERT_COML_DSP3,

    FilialDT_ABERT_COML_DSP2,

    FilialDT_ENCERR_COML_DSP2,

    FilialBUS_STATUS_DSP_ABERTURA,

    FilialBUS_STATUS_DSP,

    FilialDT_ABE_FISC_DSP,

    FilialDT_ENCER_FISC_DSP,

    FilialDT_ABERT_COML_DSP,

    FilialDT_ENCERR_COML_DSP,

    FilialRESSU_ITVD_CTL_DSP,

    FilialHOLIDAY_LIST_ID,

    FililESTADO,

    FilialDESCRICAO_CURTA,

    FilialCIDADE,

    FilialBAIRRO,

    FilialCD_SUPRIDOR,

    FilialLEAD_TIME_DSP,

    FilialREDE3,

    FilialAREA_DE_VENDAS,

    FilialGRUPO_DE_UNIDADE,

    Filial_REGIAO_IM,

    FilialREGIAO_FILHO1,

    FilialREGIAO_FILHO2,

    FilialREGIAO_FILHO3,

    FilialREGIAO_FILHO4,

    FilialREGIAO_FILHO5,

    FilialREGIAO_FILHO6,

    FilialREGIAO_FILHO7,

    FilialDESCR_REGIAO_FILHO1,

    FilialDESCR_REGIAO_FILHO2,

    FilialDESCR_REGIAO_FILHO3,

    FilialDESCR_REGIAO_FILHO4,

    FilialDESCR_REGIAO_FILHO5,

    FilialDESCR_REGIAO_FILHO6,

    FilialSUPERVISOR_FILHO1,

    FilialSUPERVISOR_DESCR_FILHO1,

    FilialSUPERVISOR_FILHO2,

    FilialSUPERVISOR_DESCR_FILHO2,

    FilialSUPERVISOR_FILHO3,

    FilialSUPERVISOR_DESCR_FILHO3,

    FilialSUPERVISOR_FILHO4,

    UF,

    FLAG_DIM

FROM [lib://Filial_Produto_QVD (dpsp_qlikview.user)/DIM_FILIAL.QVD]

(qvd)

//WHERE UF = 'RJ';

$(WHERE_PART);

PRODUTO:

LOAD

    ProdutoCATEGORIA,

    %ProdutoID,

    ProdutoDSP_EXP_ITM,

    //ProdutoINV_ITEM_TEMPLATE,

    ProdutoDSP_IMS_ID,

    ProdutoDSP_CLASS_TERAP,

    ProdutoDSP_REF_MED,

    ProdutoDESCRICAO,

    //ProdutoDESCRICAO_CURTA,

    ProdutoITEM_ESTOQUE,

    //ProdutoOPERACAO_FISCAL,

    //ProdutoDESCR_OPER_FISCAL,

    ProdutoSTATUS,

    ProdutoDESCR_STATUS,

    //ProdutoDATA_STATUS_ITEM,

    //ProdutoDATA_ADICAO,

    //ProdutoDATA_APROVACAO,

    //ProdutoCLASS,

    //ProdutoDESCR_CLASS,

    //ProdutoSUBCLASS,

    //ProdutoDESCR_SUBCLASS,

    ProdutoTIPO_MEDICAMENTO,

    ProdutoDESCR_TIPO_MEDICAMENTO,

    ProdutoTIPO_MED_COMERCIAL,

    ProdutoDESCR_TIPO_MED_COMERCIAL,

    //ProdutoCLASSE_ABC,

    //ProdutoPORTARIA,

    //ProdutoDESCR_PORTARIA,

    ProdutoLIBER_CNTR_DSP,

    ProdutoDESCR_LIB_CNTR,

    ProdutoITEM_GELAD_DSP,

    //ProdutoCONTROLE_DSP,

    ProdutoDESCR_CONTROLE_DSP,

    //ProdutoDSP_ALIQ_INT,

    ProdutoCATEGORY_ID,

    ProdutoINV_PROD_FAM_CD,

    ProdutoFAMILIA,

    ProdutoDSP_FLG_KIT,

    //ProdutoDATA_EFETIVA_ITEM,

    ProdutoITEM_EFF_STATUS,

    //ProdutoCLASS_PIS_DSP,

    //ProdutoDESC_CLASS_PIS_DSP,

    //ProdutoU_DIAS_MAIS_CA_DSP,

    //ProdutoDIAS_MAIS_DSP,

    //ProdutoTP_SUPRIMENTO_DSP,

    //ProdutoLEAD_TIME_DSP,

    ProdutoU_MRG_SEG_CAT_DSP,

    ProdutoMRG_SEGUR_DSP,

    //ProdutoDSP_ITM_SACOLAO,

    ProdutoDSP_MIX_ID,

    ProdutoFORNEC_CATEGORIA,

    ProdutoCAT_CATEGORY_ID,

    ProdutoCAT_CATEGORY_CD,

    //ProdutoID_CONTATO_FORNEC,

    //ProdutoLOC_FORNEC_CATEG,

    ProdutoDIAS_MAIS_DSP_CATEG,

    ProdutoU_DIAS_MAIS_ST_DSP_CATEG,

    ProdutoFREQ_PEDIDO_DSP_CATEG,

    ProdutoU_MRG_SEG_CAT_DSP_CATEG,

    ProdutoMRG_SEGUR_DSP_CATEG,

    ProdutoCOND_PAG_CATEG,

    ProdutoItemReferencia,

    //ProdutoALOC_EMPR_DSP,

    //ProdutoNOME_COMPRADOR,

    //ProdutoFONE_C0MPRADOR,

    //ProdutoFAX_COMPRADOR,

    ProdutoDT_CAD_CATEGORIA,

    //ProdutoTIPO_COND_PAG,

    //ProdutoDESCR_COND_PAG,

    //ProdutoDESCR_RES_COND_PAG,

    //ProdutoMOTIVO_STATUS_IT,

//     ProdutoCUSTO_MEDIO,

//     ProdutoICMS_ST_MEDIO,

//     ProdutoCLASS_IM,

//     ProdutoFLAG_PBMS,

//     ProdutoDESCR_DSP_REF_MED,

//     ProdutoDESCR_CLASS_TERAP,

//     ProdutoDESCR_IMS_ID,

//     ProdutoDESCRINV_ITEM_TEMPLATE,

//     ProdutoDESCR_EXPOSICAO_ITEM,

//     ProdutoDESCR_TIPO_TRATAM,

//     ProdutoDESCR_MIX,

//     ProdutoQMS_BASE901,

//     ProdutoQMS_SP_910,

//     ProdutoQMS_RJ,

//     ProdutoQMS_MG,

//     ProdutoQMS_BA,

     ProdutoNOME_NO_FILHO1,

//     ProdutoCOD_NO_FILHO1,

     ProdutoNOME_NO_FILHO2,

//     ProdutoCOD_NO_FILHO2,

//     ProdutoNOME_NO_FILHO3,

//     ProdutoCOD_NO_FILHO3,

//     ProdutoNOME_NO_FILHO4,

//     ProdutoCOD_NO_FILHO4,

//     ProdutoNOME_NO_FILHO5,

//     ProdutoCOD_NO_FILHO5,

//     ProdutoNOME_NO_FILHO6,

//     ProdutoCOD_NO_FILHO6,

//     ProdutoNOME_NO_FILHO1_A,

//     ProdutoNOME_NO_FILHO2_A,

//     ProdutoNOME_NO_FILHO3_A,

//     ProdutoNOME_NO_FILHO4_A,

//     ProdutoNOME_NO_FILHO5_A,

//     ProdutoNOME_NO_FILHO6_A,

//     ProdutoFORNEC_PRINCIPAL,

//     ProdutoPRC_COMPRA,

//     ProdutoPRC_FABRICA,

//     ProdutoPRC_MAX_CONS,

//     ProdutoID_ITEM_FORNEC,

//     ProdutoCOD_FORNECEDOR,

//     ProdutoNOME_FORNEC_1,

//     ProdutoNOME_FORNEC_2,

    UN,

    CX,

    DPY,

    //EstoqueCD,

    //EstoqueLOJA,

    "Custo Médio Material",

    "Última Entrada com impostos",

    //ProdutoFORNEC_ID_PRIORID1,

    //ProdutoPRECO_COMPRA,

    //ProdutoPRECO_FABRICA,

    //ProdutoPMC,

    //ProdutoDESC_COMPRAS,

    //ProdutoDSP_PRECO_VAREJO,

    //ProdutoDESCR_MULTIPLA,

    ProdutoDPSP_SUBMARCA,

    PRODUTOLINHA_PRODUTO,

    ProdutoUNIDADE_MEDIDA,

    ProdutoVALOR_MEDIDA_UNITARIO,

    ProdutoID_DSP_COMERCIAL,

    ProdutoID_DSP_CONCENTRACAO,

    ProdutoID_DSP_MARCAPROP,

    ProdutoID_DSP_MIX_GEN,

    ProdutoID_DSP_TIP_EMB,

    ProdutoID_DESCR_DSP_TIP_EMB,

    ProdutoID_DSP_FORAPR,

ProdutoID_DESCR_DSP_FORAPR,

    //ProdutoTIPO_KIT,

    //QT_CX_FORNE,

    //QT_DISPLAY,

    ProdutoCATEGORIA_STATUS,

    ProdutoCATEGORIADESCR_STATUS

FROM [lib://Filial_Produto_QVD (dpsp_qlikview.user)/DIM_PRODUTO.QVD]

(qvd)

$(WHERE_PART2);

Thank you...