Qlikview 简明教程

QlikView - Incremental Load

随着 QlikView 文档的数据源中的数据量增加,加载文件所需的时间也会增加,这会减慢分析过程。最小化此数据加载所需时间的一种方法是仅加载源中新增或更新的记录。这种仅将源中的新增或更改的记录加载到 QlikView 文档中的概念称为 Incremental Load

要识别源中的新记录,我们使用每个行的顺序唯一键或日期时间戳。唯一键或数据时间字段的这些值必须从源文件流向 QlikView 文档。

让我们考虑以下包含零售店产品详细信息的源文件。将其另存为 .csv 文件到本地系统中,以便 QlikView 可以访问该文件。一段时间后,添加了一些产品并且某些产品的描述发生了变化。

Product_Id,Product_Line,Product_category,Product_Subcategory
1,Sporting Goods,Outdoor Recreation,Winter Sports & Activities
2,"Food, Beverages & Tobacco",Food Items,Fruits & Vegetables
3,Apparel & Accessories,Clothing,Uniforms
4,Sporting Goods,Athletics,Rugby
5,Health & Beauty,Personal Care
6,Arts & Entertainment,Hobbies & Creative Arts,Musical Instruments
7,Arts & Entertainment,Hobbies & Creative Arts,Orchestra Accessories
8,Arts & Entertainment,Hobbies & Creative Arts,Crafting Materials
9,Hardware,Tool Accessories,Power Tool Batteries
10,Home & Garden,Bathroom Accessories,Bath Caddies
11,"Food, Beverages & Tobacco",Food Items,Frozen Vegetables
12,Home & Garden,Lawn & Garden,Power Equipment

Loading the Data into QlikView

我们将在脚本编辑器 (Control+E) 中使用 Table Files 选项加载上述 CSV 文件,如下所示。我们还将数据保存在本地系统中的 QVD 文件中。将 QlikView 文档保存为 .qvw 文件。

incr laod create qvd

Verifying the Data Loaded.

我们可以通过创建一个名为 Table Box 的工作表对象来检查加载到 QlikView 文档的数据。这可在 Layout 菜单和 New Sheet Objects 子菜单中找到。

table box option

Creating the Table Layout

选择 Table Box 工作表对象后,我们会看到下一个屏幕,用于选择要创建的表中的列及其位置。我们选择以下列及其位置,然后单击 Finish。

Incr load product details

Viewing the Existing Data

将出现以下图表,显示上一步中列出的数据。

incremental load data

Updating the Source Data

让我们向源数据添加以下三个更多记录。此处,产品 ID 是表示新记录的唯一数字。

13,Office Supplies,Presentation Supplies,Display
14,Hardware,Tool Accessories,Jigs
15,Baby & Toddler,Diapering,Baby Wipes

Incremental load script

现在,我们编写脚本以仅提取源中的新记录。

// Load the data from the stored qvd.
Stored_Products:
LOAD Product_Id,
     Product_Line,
     Product_category,
     Product_Subcategory
FROM
[E:\Qlikview\data\products.qvd]
(qvd);

//Select the maximum value of Product ID.
Max_Product_ID:
Load max(Product_Id) as MaxId
resident Stored_Products;

//Store the Maximum value of product Id in a variable.
Let MaxId = peek('MaxId',-1);

	 drop table Stored_Products;


//Pull the rows that are new.
NewProducts:
LOAD Product_Id,Product_Line, Product_category,Product_Subcategory
	 from [E:\Qlikview\data\product_categories.csv]
	 (txt, codepage is 1252, embedded labels, delimiter is ',', msq)
	 where Product_Id > $(MaxId);

//Concatenate the new values with existing qvd.
Concatenate
LOAD Product_Id,Product_Line, Product_category,
     Product_Subcategory
FROM [E:\Qlikview\data\products.qvd](qvd);

//Store the values in qvd.
store NewProducts into [E:\Qlikview\data\products.qvd](qvd);

上述脚本仅提取新记录,这些记录被加载并存储到 qvd 文件中。正如我们看到的具有新产品 ID 13、14 和 15 的记录。

incremental load final data