QlikView之数据类型

浏览: 4186

在之前的一篇文章中,给大家介绍了QV中的日期类型以及相关用法,后来有很多人在问关于数据类型的问题,这里就统一给大家回复并讲解一下。对于QlikView的初学者来说,数据类型往往是一个比较困扰的问题,比如数据类型如何存储,工作机制是什么,如何才能正确的使用,我就根据我目前的经验简要的给大家介绍一下,以便大家在学习QlikView的道路中少走弯路,当然如有不对的地方欢迎大家指正。

       首先,在QlikView中其实是不存在所谓的数据类型这一说的,这并不是QlikView工具的限制,而是一个QlikTech公司有意的设计决策。先来看看背景,在QlikView工具的设计初期,要求数据源多样化,用户可以从数据库,Excel,CSV文件等等来获取数据源。这些不同种类的数据源有的存在数据类型有的却没有数据类型,因此将这些类型统一起来将是一个非常麻烦和头疼的事情。除此之外,为了方便用户使用,在QlikView的内部函数计算过程中,也不允许有任何数据类型转换的出现。

       这种情况下,QlikView引入了双重格式(QV中称为Dualformat),也可以说在QlikView中数据都具有二元性。针对以上提到的QV的需求,这是一种很简单并且出色的解决方案。其核心是每个字段值都具有二元性,一个是字符串用来显示,一个是数字用来计算和排序。这两个值就好比硬币的正反面一样是密不可分的,他们构成了QV中的一个完整的值。例如months不仅存在'Jan’,'Feb’…'Dec’之类的值用来前台展现,同时也存在1到12的数值用来排序,再比如weekdays不仅存在‘Mon’,'Tue’…'Sun’同时也存在0到6的数值。


日期和时间含有类似于“12/31/2011”或“06.06.194406:30”的字符串用来显示,同时也存在对应的数字,事实上这个数字是用来计算自1899年12月30号以来所经历的天数。月,周,天以及时间的显示格式都是在脚本开始的环境变量中提前声明的。


当QV的字段作为参数传入QV函数的时候,函数会自动选择双重格式中的一种值进行内部运算,比如字段值作为第一个参数传给Left(s,n)的时候,函数取字符串进行计算,返回值也是字符串,当使用Month(date)的时候,函数取数值进行运算,然后返回表示月份的数值。大部分的QV函数都具有二元性,甚至连颜色函数也是如此,不错值得说明的是,字符串函数却是一个例外,比如Left(s,n)函数,因为没有和该字符串所关联的数字,在数值部分以空值填充。

       理解了这些,我们就可以按照数字那样为月,天或时间字段进行排序,同时也可以把时间字段作为数字来进行加减等数学运算,并且QV提供给我们了Dual(s,n)函数,利用该函数我们可以把含有字符串的字段作为数字来进行排序,比如我们帮助文档中给出的例子:

loaddual ( string,numrep ) as DayOfWeek inline

[string,numrep

Monday,0

Tuesday,1

Wednesday,2

Thursday,3

Friday,4

Saturday,5

Sunday,6];

loadDate, weekday(Date) as DayOfWeek from afile.csv;

此脚本示例将生成 DayOfWeek 字段,以清晰的文本形式显示每一个工作日。QlikView会根据全部目的将此字段视为数字字段。

       QV没有数据类型看起来简单易用,其实只是简化了用户的使用,对用户来说比较友好,从本质上讲,QlikView存储的数据比普通的字符串数据要复杂得多。

推荐 5
本文由 曹浩 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

感谢曹老师分享
学习了,辛苦曹老师了,非常感谢

要回复文章请先登录注册