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

问题背景:

一直很想不通,公司花了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不久。有言论不正确之处,各位小伙伴多多指教。

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

时间: 2024-10-29 04:53:20

QlikView实现部分加载数据的功能(Partial Load)的相关文章

AngularJS:实现页面滚动到底自动加载数据的功能

要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现.步骤如下: 1. 下载ng-infinite-scroll.js程序http://sroze.github.io/ngInfiniteScroll/ 目前版本是1.0.0 2. 如果你是用的jQuery2.0以上版本,还需要修改ng-infinite-scroll.js程序,将所有的将所有的$window.xxx改为$(window).xxx, elem.xxx改为$(

QlikView实现部分载入数据的功能(Partial Load)

问题背景: 一直非常想不通,公司花了N多钱请了一帮QlikView的Consultant做出来的solution居然没有涉及Reload的部分,以至于每次刷新数据都须要刷新整个Data Model,之前和部门同事讨论的时候我还信誓旦旦的说QlikView就仅仅能这样了,找不到方法仅仅将新数据刷新到Data Model中而不用又一次load之前已经在Memory里面的数据. 幸而今天一位朋友提到了Add Load中的Partial Load,于是便查了一个小时的Google,经过回来试验之后,豁然

DevExpress的GridControl的实时加载数据解决方案(取代分页)

http://blog.csdn.net/educast/article/details/4769457 evExpress是一套第三方控件 其中有类似DataGridView的控件 今天把针对DevExpress.XtraGrid.GridControl实时加载数据的功能开发出来了 分享给大家 欢迎讨论 Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using

smarty中增加类似foreach的功能自动加载数据方法

第一步:在Smarty_Compiler.class.php的_compile_tag函数中增加: 复制代码 代码如下: //加载数据的开始标签case 'load': $this->_push_tag('load'); return $this->_complie_load_start($tag_args); break;//加载数据的结束标签case '/load': $this->_pop_tag('load'); return "<php endforeach;

asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)

自从腾讯微博上线以来,基本上就开始用了,一直到现在,作为一个开发人员,也看到了腾讯微博一直在不停的改变,也不知道大家有没有发现,腾讯微博提供两种加载数据的方式,一种是分页,一种是滚动浏览器滚动条加载数据,分页功能我想大家都做得太多了,今天我与大家分享一下我用滚动条滚动加载数据,小生不才,还望各位大侠指教,呵呵~ 下面开讲: 首先说一下思路,我用的是Jquery,然后通过Jquery的ajax()方法通过 HTTP 请求加载远程数据来实现的,用到Jquery,首先要应用jquery.min.js类

使用Jquery-easyUI的datagrid从后台加载数据不成功的解决办法

最近在用easyUI做一个注册页面总是出现从后台数加载不成功的问题,后来在一个师兄的指导下通过debug模式终于发现问题并解决了,以下记录我解决这一问题的过程.开发环境:jdk1.7,工具:eclipse,框架:spring-mvc spring-mvc的配置代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche

网络加载数据及单例工具类的代码抽取

今天给大家分享一一下网络加载数据:先看代码吧-------------------------- - (void)diseaseNumWithFinishedBlock:(FinishedBlocks)finishedBlock{ NSString *urlStr = @"http://数据接口"; NSDictionary *prama = @{响应参数}; [[NetWorkTool sharedNetWorkTool] POST:urlStr parameters:prama p

自定义ListView动态加载数据

我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分批加载我们所需的数据,提升用户体验,先上图.           一般如果一个Activity集成越多的功能,代码量也会随之增多,看起来让人烦,我们可以考虑自定义控件将一些操作集成进去. 自定义ListView 1 package com.example.listviewdynamicloading

jQuery异步加载数据添加事件

几个月前在一个项目中涉及到树形栏,然后看了很多插件,觉得有点麻烦,于是自己写了一个,写着写着就出问题了.当时项目是通过树形栏进行权限控制的,管理员可以对从数据库去的数据动态生成树形栏进行增删改查操作,可是用$(".XX").click();方法是不行的.1.之前用的是jq1.4.3 ,jq1.7一下都可以使用live()方法,来实现该功能 $('#div').live('click',function(){ //do stuff }); 但是live方法也有不支持的事件,例如:togg