Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
michaelfentondata
Partner - Contributor III
Partner - Contributor III

Standard Pattern for using QVD files

Are there any standard patterns for using QVD files in the QDF?

In particular, how should the user apps load the data generated by the QDF generator apps?

I assume that each Generator will always reside in it's own System container (eg.  99.System_NorthWind). 

I also assume that the Generator apps save the QVD files into their own local 2.QVD folder using vG.QVDPath.  Please let me know these assumptions are ill-formed to begin with.


From here is see a few options:


  1. A separate process copies those QVD files to the local 2.QVD folder in each User app container where they are required.  This seems inefficient to me, but an advantage is that the User app containers do not require any special permissions or access to any other containers.
  2. The User app accesses the QVD files directly in the System container using a linked container (LoadContainerGlobalVariables).
  3. The User app accesses the QVD files directly in the System container using a customer global variable.

  

Have I missed something in the document that answers this question?

For context, I am expecting the implementation at my current site to be fairly simple.  They are on Small Business Edition (no Publisher) and there will probably be 5 to 10 source systems and less than 20 user apps.  I expect to only have 2 tiers of ETL (ie. no separation between Extract and Transform).

1 Solution

Accepted Solutions
Magnus_Berg
Employee
Employee

Hi Michael, good question. You can either Pull or Push data between containers. Where pull is the "default" meaning that applications in a container (ex HR) can access and pull data from the system container by using function call LoadContainerGlobalVariables('NorthWind','QVD') this creates a global variable link to NorthWind container (vG.NorthWindQVDPath). This method should be used as long as HR have security access to the data inside NorthWind container. The Push option only applies when the business do not have access the system container but still need some of that data. For this we have created the QVDMigrate function call that will push data (qvd, fields, scramble sensitive data) to the HR container from NorthWind.

In your case best practice is to create a System Container for each of your sources, put qvd loader and connection string in each of them (if you use qvd loaders). Create a single "company" container and pull the needed data from the sources by using the LoadContainerGlobalVariables function. This will create a very easy to understand structure, you will have the LoadContainerGlobalVariables in the beginning of the apps so that newcomers understands what data sources the apps are using, and the scripts becomes easy to read. Also use Global Variables in the "Home" Container to put the business logic. Folders in the containers not needed can be removed (like Mart, Import,Export).

Cheers

View solution in original post

2 Replies
Magnus_Berg
Employee
Employee

Hi Michael, good question. You can either Pull or Push data between containers. Where pull is the "default" meaning that applications in a container (ex HR) can access and pull data from the system container by using function call LoadContainerGlobalVariables('NorthWind','QVD') this creates a global variable link to NorthWind container (vG.NorthWindQVDPath). This method should be used as long as HR have security access to the data inside NorthWind container. The Push option only applies when the business do not have access the system container but still need some of that data. For this we have created the QVDMigrate function call that will push data (qvd, fields, scramble sensitive data) to the HR container from NorthWind.

In your case best practice is to create a System Container for each of your sources, put qvd loader and connection string in each of them (if you use qvd loaders). Create a single "company" container and pull the needed data from the sources by using the LoadContainerGlobalVariables function. This will create a very easy to understand structure, you will have the LoadContainerGlobalVariables in the beginning of the apps so that newcomers understands what data sources the apps are using, and the scripts becomes easy to read. Also use Global Variables in the "Home" Container to put the business logic. Folders in the containers not needed can be removed (like Mart, Import,Export).

Cheers

michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

Thanks very much Magnus.

I appreciate the complete response.  It looks like I was heading down the right track, which is encouraging.

Cheers