Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
d_koti24
Creator II
Creator II

How to pass the path as a parameter in sub routine?

Hi,

     I have 4 qvds,That 4 Qvds contains the same fields,i was created one sub routine,how to pass qvd path as parameter.

sub routine:

sub sample(z_path)

load

a,

b,

c,

d

from

z_path

(qvd);

call sample("f:\qvds\qvd1.qvd")

while running this app ,I did nt get any error.but It did n't load the data.

How to pass the path as a parameter in sub routine?

regards,

kd

1 Solution

Accepted Solutions
maxgro
MVP
MVP

changed something, in bold

sub sample(z_path)

    trace z_path='$(z_path)';

    load

    *

    from $(z_path) (qvd);

ENDSUB;

call sample('f:\qvds\qvd1.qvd');

View solution in original post

6 Replies
arulsettu
Master III
Master III

hi try like this

SET QvdPath = f:\qvds;

sub sample:

load

a,

b,

c,

d

from $(QvdPath)\sub sample.qvd;

maxgro
MVP
MVP

changed something, in bold

sub sample(z_path)

    trace z_path='$(z_path)';

    load

    *

    from $(z_path) (qvd);

ENDSUB;

call sample('f:\qvds\qvd1.qvd');

Gabriel
Partner - Specialist III
Partner - Specialist III

Hi,

I would suggest having you path in variable

LET vPath = '..\..\FileSource';

Then

SUB Sample(TableName,vPath)

     STORE '$(TableName)' INTO $(vPth).QVD(QVD);

ENDSUB;

Call Sample('TableName',vPath);


d_koti24
Creator II
Creator II
Author

Hi Massimo,

Thanks for your quick reply...! it's working fine.

after that I want to split that qvd into monthly wise qvd's based on date field and store that qvd's into req path.hw to achive this.?that req path also I want to pass as a paramerter.

maxgro
MVP
MVP

//

// load and store 1 month

//

SUB LoadAndStore (vFile, vYearMonth)

    trace vFile='$(vFile)';

    sourcebymonth:

    load *

    from $(vFile) (qvd)

    where Year(d) = left('$(vYearMonth)',4) and Month(d) = Right('$(vYearMonth)',2);

   

    let vFile2=replace('$(vFile)', '.qvd', '');

    TRACE vFile2=$(vFile2);

    store sourcebymonth into $(vFile2)_$(vYearMonth).qvd (qvd);

    drop Table sourcebymonth;

ENDSUB;

//

// test data: qvd with 2 year

//

LET myQvdFile='C:\Users\mgrossi\Downloads\source.qvd';

source:

LOAD

  date(makedate(2014) + floor(rand()*730)) as d,

  floor(rand() * 100) as val

AutoGenerate 1000;

store source into $(myQvdFile) (qvd);

DROP Table source;

//

// min and max year month

//

tmp: load

  date(min(MonthStart(d)), 'YYYYMM') as MinMonth,

  date(max(MonthStart(d)), 'YYYYMM') as MaxMonth

from $(myQvdFile) (qvd);


let vMin=peek('MinMonth');

let vMax=peek('MaxMonth');

trace vMin=$(vMin) vMax=$(vMax);

DROP Table tmp;

//

// loop on year month

//

for ym=$(vMin) to $(vMax)

  if Right(ym,2)>0 and Right(ym,2)<=12 then

  trace ym=$(ym);

  CALL LoadAndStore('$(myQvdFile)', '$(ym)');

  ENDIF;

NEXT ym;

d_koti24
Creator II
Creator II
Author

Hi Massimo,

This is my sample code ,i am getting error at store place.it's working fine upto store command.

sub sample(z_path,z_path1, s_loc)

  trace z_path='$(z_path)';

  trace z_path1='$(z_path1)';

  trace s_loc='$(s_loc)';

 

FACT:

  LOAD a,

       b,

     PERIOD

    

FROM

$(z_path) (qvd);

Concatenate

LOAD LOAD a,

          b,

     PERIOD

FROM

$(z_path1) (qvd);

Dates:

LOAD DISTINCT 

left(DATE(PERIOD,'MM/DD/YYYY'),2) AS MONTH, YEAR(DATE(PERIOD)) AS YEAR  

RESIDENT FACT;

LET vNoOfMthsYrs = NoOfRows('Dates');

set qv_name='sample';

trace qv_name='$(qv_name)';

FOR i = 0 TO $(vNoOfMthsYrs) - 1  

 

  LET vMonth = PEEK('MONTH', $(i), 'Dates'); 

  LET vYear = PEEK('YEAR', $(i), 'Dates');

  

  MONTHLY:

  LOAD  *,'' as tmp RESIDENT FACT

  WHERE left(DATE(PERIOD,'MM/DD/YYYY'),2) = '$(vMonth)' AND YEAR(DATE(PERIOD)) = '$(vYear)';

      STORE MONTHLY into [$(s_loc)\$(qv_name)$.(vYear)_$(vMonth).qvd](qvd);

  drop field tmp;

  drop table MONTHLY;

 

NEXT

Drop tables FACT,Dates;

ENDSUB;

call sample('d:\sample1.qvd','d:\sample2.qvd','d:\monthlyqvds');

regards,

kd