我们学习任何一种编程语言都要知道的是数据类型,但是在qlikview中是不存在数据类型的,这并不是qlikview工具的限制,而是QlikTech公司的有意为之。
背景介绍
在Qlikview工具的设计初期,要求数据源多样化,用户可以从数据库,excel,CSV文件等来获取数据源。这些不同种类的数据源有的存在数据类型,有的却没有数据类型,因此将这些类型统一起来奖是一个非常麻烦的事情。除此之外,为了方便用户使用,在Qlikview的内部函数计算过程中,也不允许有任何数据类型转换的出现。
Dual Format
因此,Qlikview引入了双重格式(Dual format),即Qlikview中数据都具有二元性,每个字段值都有二元性,一个是字符串--用来显示,一个是数字--用来计算和排序。例如month不仅存在'1月’,'2月’…'12月’之类的值用来前台展现,同时也存在1到12的数值用来排序,再比如weekdays不仅存在‘周一’,'周二’…'周日’同时也存在0到6的数值。日期和时间含有类似于“12/31/2019”字符串用来显示,同时也存在对应的数字,事实上这个数字是用来计算自1899年12月30号以来所经历的天数。月,周,天以及时间的显示格式都是在脚本开始的环境变量中提前声明的,如下图所示。

大部分的Qlikview函数都具有二元性,甚至连颜色函数都是如此,但字符串函数却是一个例外,比如Left('String',4),因为没有和该字符串所关联的数字,因此此时与字符串对应的数值部分以空值填充(这句话怎么理解呢,别着急,下面Dual函数部分会举例详解滴。。。)。
Qlikview函数的处理过程举例:Month(date),函数取date的数值进行运算,然后返回表示月份的数值。
数据二元性举例:
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='¥#,##0.00;¥-#,##0.00';
SET TimeFormat='h:mm:ss';
SET DateFormat='YYYY/M';
SET TimestampFormat='YYYY/M/D h:mm:ss[.fff]';
SET MonthNames='一月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月';
SET DayNames='周一;周二;周三;周四;周五;周六;周日';
YearMonth:
LOAD YearMonth, Month(YearMonth) as Month
INLINE [
YearMonth
2013/1
2013/2
2013/3
2013/4
2013/5
2013/6
2013/7
2013/8
2013/9
2013/10
2013/11
2013/12
];注意:上面的代码段中SET DateFormat='YYYY/M';所以inline table中的2013/1才能被识别为日期。进而提前加载中Month函数才会有效。
下面是Month的双格式显示效果,分别用到了Text函数和num函数。

Dual函数
dual( s , x )
---s指的是任意的字符串形式的字段,如下面例子中的City_Name字段;
---x指的是任意的数字形式的字段,如下面例子中的City_Num字段;
北上广深杭:
LOAD City_Name as City, dual(City_Name,City_Num) as City_Order
INLINE [
City_Name, City_Num
深圳, 4
上海, 2
北京, 1
广州, 3
杭州, 5
];
上面的代码说明:
1. Part 1用City_Order字段作为列表框的字段可以按照“北上广深杭”的顺序显示城市,但是part 2用city字段作为字段则显示顺序是数据加载的顺序;
2. Part 1的“Dual Function”用的是City_Order字段,则在Num(City_Order)有对应的数字显示,也即是有数字类型被存储;但是part 2用的是city 字段,Num(CIty)显示的则是‘-’,说明此时并没有与之对应的数字类型被存储。
Qlikview不设数据类型,而是采用双重格式(Dualformat),每个字段同时拥有字符串和数字两种形式。字符串用于显示,数字用于计算和排序。例如,Month字段同时有'1月'到'12月'的字符串和1到12的数值。日期和时间也有类似的处理方式。Qlikview函数在处理过程中考虑了这种二元性,大部分函数都能处理双重格式,而字符串函数则不涉及数字转换。此外,通过设置环境变量定义日期和时间的显示格式。博客通过实例展示了如何使用Month函数和Dual函数来操作和显示数据。
847

被折叠的 条评论
为什么被折叠?



