Home  >  Article  >  Database  >  QlikView实现部分加载数据的功能(PartialLoad)

QlikView实现部分加载数据的功能(PartialLoad)

不言
不言Original
2018-05-18 15:32:571269browse

问题背景: 一直很想不通,公司花了N多钱请了一帮QlikView的Consultant做出来的solution竟然没有涉及Reload的部分,以至于每次刷新数据都需要刷新整个Data Model,之前和部门同事讨论的时候我还信誓旦旦的说QlikView就只能这样了,找不到方法只将新数据刷新

问题背景:

一直很想不通,公司花了N多钱请了一帮QlikView的Consultant做出来的solution竟然没有涉及Reload的部分,以至于每次刷新数据都需要刷新整个Data Model,之前和部门同事讨论的时候我还信誓旦旦的说QlikView就只能这样了,找不到方法只将新数据刷新到Data Model中而不用重新load之前已经在Memory里面的数据。

幸而今天一位朋友提到了Add Load中的Partial Load,于是便查了一个小时的Google,经过回来试验之后,豁然开朗了,兴许再过一年半载,小哥我可以重新改写公司的solution。哈哈,美梦到此为止,下面开始进入主题:

什么是Partial Load:

顾名思义,Partial Load就是部分加载数据的意思,比如数据仓库中维度表的数据源有数据来要插入到数据库中的时候,会用Merge来控制只增加或者更新数据,而对已经存在于数据库中没有任何变化的数据不做处理。对QlikView,我们可以想象一下,由于QlikView将数据导入到内存中,那么在重新加载数据到内存中的时候,有没有一种方法是对在内存中不变的数据不作处理,而只用加载新的数据进去呢?今天我试验的结果是肯定的,用下面的方法就可以。

LET vTimeStart = Now();

FOR vI = 1 to 1000
	LOAD
		$(vI) as SellerId,
		$(vI) as Sales
	From
		TestAdd.csv;
Next;

TestAddTable:
Add LOAD
	SellerId,
	Sales
From
	TestAdd.csv
	(txt, codepage is 936, embedded labels, delimiter is ',', msq)
Where
	not Exists(SellerId);

LET vTimeEnd = Now();

注意:TestAdd.csv文件要和QVW文件放在一个目录下,否则需要写TestAdd.csv的全路径。将上面的QlikView代码拷贝到QlikView Script中去之后,点击Reload;

由于For ... Next语句里循环加载了1000条数据,TestAdd.csv文件中开始只有下面一条数据:

SellerId, Sales
10000123,987654321

因此数据加载完毕之后,在Data Model里面预览TestAddTale里的数据如为:\

然后再往TestAdd.csv文件中新增加一条数据,TestAdd.csv中的数据变为:

SellerId,Sales
10000123,987654321
12332112,312677876

在报表中新建一个文本对象,公式为:=Second(vTimeEnd - vTimeStart),结果为5秒左右表示整个Reload用了5秒。

下面激动人心的时刻到了,点击Partial Load(File - > Partial Reload),数据瞬间加载完毕,页面上的文本对象已经变为了0,表示这次数据加载所用的时间几乎为0. 再Preview一下Data Model里面的TestAddTable里的数据为:\ 新数据已经加载进去,老数据依然在内存中没有变化。

由于加了Not Exists的过滤条件,因此第一条数据10000123,987654321,不会被再次加载到Data Model中。(我会在另外一篇文章中详细描述Exists的作用) 某则将出现两条一模一样的数据。

Partial Load在实际工作中的使用展望:

在我发现这个功能之后,被小伙伴们质疑在现实项目中是否有用武之地,我想了想,肯定是有用的,只是受制于现在的solution,假以时日等小哥技术成熟了,肯定能写出一套更好的solution。比如可以这样用:对于月更新的数据,就用一般的Load方式,对于每天要刷新的文件,就用Add Load的方式进行Partial Load,这样就不会每次刷新Daily文件的时候也把Monthly的数据一起刷新了。

结语,现在俺也是接触QlikView不久。有言论不正确之处,各位小伙伴多多指教。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn