Qlik Community

Ask a Question

QlikView App Dev

Discussion Board for collaboration related to QlikView App Development.

Announcements
Join us at the Cloud Data and Analytics Tour! REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Data loading from QVD

Hello everyone,

So I'm starting to implement qvd in my qlikview application.

So far I have read some posts about how to use the qvds and I already created the files.

So far the script on my qvw has the following structure:

     SQL Connection String

     query1:

               Select statement;

               STORE query1 INTO query1.qvd(qvd);

     query2:

               Select statement;

               STORE query2 INTO query2.qvd(qvd);

     query3:

               Select statement;

               STORE query3 INTO query3.qvd(qvd);

The qvds are created with the data from the select statement. But I have some questions regarding this:

     - How do the qvds reload the information?

     - After the creation of the qvds, can I delete the select statement from the qvw?

     - Should I put the select statement in the qvd instead?

I'm a little confused regarding how everything should be connected in order to be efficient using the qvds.

Thank you in advance.

Ivo

15 Replies
swuehl
MVP
MVP

- If you want the data in the QVD reloading the data from the DB, you need to rerun above script.

-Yes, you can, but then you will work with the data stored in the qvd, it's not possible to update data anymore.

-No.

Gysbert_Wassenaar

Qvd files are just data files. They cannot 'do' anything, so they'll never reload themselves. You create qvd files with a load script like you posted. Running that script again will recreate the qvd files with the latest data.

After you created the qvd files you can load the data from the qvd files instead of from your sql database. If that's what you want to do then you can remove the sql statements.

There's no way for you to put a select statement into a qvd file other than creating a table with an sql statement and store that table into the qvd file. The select statement that created the table is stored in the qvd in the xml header of the qvd document. But it's just metadata. It won't be used when you load the data from the qvd file.


talk is cheap, supply exceeds demand
swuehl
MVP
MVP

You can use a layered approach:

Build a QVW that queries your DB and stored the data into QVD.

Have that QVW reloaded as needed to keep QVD in sync with DB.

Have another QVW(s) use these QVD to build the data model.

You can set up security that users creating the second QVW can't access the first QVW, only have access to the deployed QVDs.

Not applicable
Author

But there is one thing that is not making sense to me.

To update the qvds I have to execute the script in the qvw and I still have to wait for the select statements to finish, so how do I have a performance enhancement with the qvds like this?

Thank you for the reply

swuehl
MVP
MVP

In a simple setting, you won't save time for reloading your application.

But imagine reusing the same created QVDs in a lot of different QVWs (for Sales, Executive dashboard, Production etc.).

And you can run several QVWs querying the DB(s) in parallel.

Not applicable
Author

Hi Ivo Marques

- QVDs are nothing but data files. (Same as Excel with some data in it)

- When you generate a qvd its nothing but extracting the data from database (currently available data in the database at time of loading) and saving it as copy.

- Each time you reload it will overwrite the data

- Your select statements are required all the time to read the data and store command to  create qvd. so create one dedicated qvw file for this ( for example : qvd_generator.qvw ) and you can schedule this qvw file in the server to generate qvd files .

Regards

Veeki

Not applicable
Author

Thank you for the help guys!

From what I understood I will always need a QVW to generate the QVD.

The QVD is only an advantage if I have multiple QVW accessing the same data source.

For my application I only need to have one QVW so, there is not really any advantage in using the QVD...

I have 4 sql queries running in my application. The application takes about 3/4 minutes to reload the data and I was studying the QVD in order to reduce the reload time. But unfortunately it does not seem to be the most correct thing to use.

Are there any optimization techniques that can improve the reload time?

Thank you once again for the help.

ankit777
Specialist
Specialist

You must try incremental loading.

Not applicable
Author

Well after some test with incremental loading, I was able to reduce a query of 1 minute to 7 seconds.

Not bad

Still I have one problem. I have four SQL queries and so I am creating 4 different QVDs for each query and for each I have 5 STORE statements:

     STORE query1 INTO query1.qvd(qvd);

     STORE query2 INTO query2.qvd(qvd);

     STORE query3 INTO query3.qvd(qvd);

     STORE query4 INTO query4.qvd(qvd);

Is there a way of writing the four queries to the same QVD?

Something like: STORE query1, query2, query3, query4 INTO GeneralQuery.qvd(qvd);

Thank you for the help!