BI产品QlikView中文教程

QlikView Tutorial V8
高级特性
ADVANCED FEATURES



第十七课 更多的关于联合
LESSON 17 MORE ABOUT ASSOCIATIONS

字段页出现在每次脚本执行之后,它包含一个已命名的选项Show System Fields.如果这个选项被选中,Available Fields下的列表会多出六个以美元符$打头的字段.这些字段被称作系统字段,用来获取QlikView文件的逻辑结构非常有用.
本次课的第一部分描述系统字段和展示如何将它们显示在系统面板上.第二部分展示一个例子,你能够使用系统字段解决普通的问题:在联合字段中显示频率信息.

创建一个系统面板
Creating a system sheet
1 启动QlikView.
2 打开Advanced.qvw.
3 在工具栏上点击Add Sheet按钮.
4 打开Sheet Properties对话框.命名为System.
5 切换到Fields页.
6 移动系统字段(以美元符$打头的字段)到Fields Displayed in Listboxes下.如果你没有发现系统字段,请选中Show System Fields选项.

系统字段展示
恢复字段名称($Field),
the names of the fields retrieved ($Field),
已装载表名称($Table),
the names of the tables loaded ($Table),
表中行数和栏位数($Rows and $Fields),
the number of rows and columns in a table ($Rows and $Fields),
特定字段的栏位号($FieldNo),和
the column number for a specific field ($FieldNo), and
已装载表信息($Info).
the names of the info tables loaded ($Info).
7 点击OK.
8 调整列表直到你看到所有的字段名和所有的字段值.
9 将文件另存为System.qvw.

使用系统面板
Using the system sheet
现在你的系统面板已准备就绪,但还需要对他进行改良,为列表$Field选择Show Frequency:
1 打开列表$Field的Properties对话框,并切换至General页.
2 选中Show Frequency,然后切换至Sort页.
3 选中Frequency下拉选择Descending,然后点击OK.
现在$Field字段中的值,在表里面通过其频率数降序排列.列表开始按频率分类,字段的首部是频率最高的.
你看到字段Country在表中出现了三次,Customer ID和Salesman ID在表中出现了两次,其他的字段至出现了一次.现在点击toolbar上的Table Viewer按钮,来得到单独包含数据结构的窗口.
三个字段出现了不止一次,它们用于联合文件中的表.
4 点击OK,退回到你的文件.
5 点击列表$Field中的Country.
现在程序显示字段Country出现在表Country1(一个逻辑表,有三个country表连接组成),Customer和Markets中,其他的列表提供附加的信息,相关表的行数和字段数,和字段的栏位号.
此外列表$Info显示表通过Country连接的信息.
一旦在列表中只有一个表或是信息表是可用的(选取或可选),一个小的信息符号i出现在列表的右上角.点击它,这将允许你直接地编辑表:
6 在列表$Table中点击其中任意一个表.
7 信息符号i出现在列表的右上角.点击它.注意,那些字段为了这个作业已被放置在

相同的文件夹中.
8 现在通过相关联的程序(如:Excel)打开原始表.研究它,然后关闭程序回到QlikView.
9 清除你之前的选取操作.
注意,如果表的文件类型(扩展名通常是csv),没有连接到合适的文件编辑器,表将不会被打开.为了将文件类型和程序联系起来,打开资源管理器.在打开方式中选择程序,比较好的是记事本或是Execl,然后点击OK.
当作业中存在大量复杂数据结构设置,它不可能保持全部数据结构的良好展现.系统面板此时起着决定性的重要作用.

创建系统表
Creating a system table
此外在列表中显示系统字段,你也可以通过创建系统表来图解它们的关系:
1 右键点击面板里的空白处,在浮动菜单中选择New Sheet Object下的System Table.
现在你的面板上出现了系统面板.调整它的大小.研究它.你将发现第一行栏位,列出文件中所有能够找到的字段,通过一个栏位跟随着每个已装载表的字段.如果表中包含最左侧字段列表中的字段,这个字段也将出现在表栏位中;如果不是,将显示一个'-'(表明一个NULL值).
你能够很容易地发现哪个字段是关键连接词.例如,在多于一个表中通用的字段.系统字段因而能够清晰地展现出文件中表是如何连接的.

在联合字段中显示频率
Showing frequency in associating fields
支持你的作业,在面板Customer中,希望看到你有多少顾客在不同的国家里.例如,这些国家在多少时间段里存有数据.
1 切换至面板Customer.
2 右键点击列表Country,点击Properties...
3 切换至General页.
选项Show Frequency是不能选取状态.例如,这个字段没有可以显示的频率.为什么?
研究系统面板,你很清晰的看到,字段Country出现在多个表里.事实上,三个已装载表包含一个字段名为Country.Country1和Market包含地理信息和一个属于不同国家的市场列表,单独的列出每个国家尽一次.表Customer,包含多于一个有若干个顾客居住的国家.三个Country字段在联合时被视为一个,它不可能让程序知道究竟是哪个表将参与数据频率的计算.
至此,猜想一下,导致错误结果的原因.QlikView设计好,当数据解释不明确的联合字段时,将不允许既定的操作.
实际上你对顾客表里的国家频率感兴趣.为了获得你需要的信息,在第二时间,从表Customer.csv使用一个新的名称装载字段Country:
4 关闭列表Properties对话框.
5 打开Edit Script对话框.
6 找到装载Customer.csv的声明,并将光标放到最后,然后输入引号中的内容', Country as CustomerCountry'.现在Edit Script对话框中产生类似脚本:
...
Load [Customer ID],
Customer,
Address,
City,
Zip,
Country, Country as CustomerCountry
FROM [..\Application\Data Sources\CUSTOMER.CSV] (ansi, txt, delimiter is ',', embedded labels);
...
你需要保持字段Country,否则这里将没有

关键连接字段并且导致不能联合实现装载的表.
7 点击Reload按钮.
8 移动新字段CustomerCountry到Fields Displayed in Listboxes下,然后点击OK.
现在你的面板Customer包含第二个国家列表,只列出有顾客居住的国家.这个字段名不在文件中和其他字段名相通用,这第二个字段不是联合字段.它因此有可能显示频率信息.
9 右键点击列表CustomerCountry,然后选择Properties...
10 在General页,选中Show Frequency,然后切换到Sort页.
11 选中Frequency,然后点击OK.
现在国家按照频率来排列.你也许需要调整列表来观察数字.
至此它事实上比Country字段更多地感觉到是有字段CustomerCountry在这个面板上(你对哪个国家没有顾客不感兴趣),操作如下:
12 删除列表Country.
当在面板Customer上选取国家的时候,那现在将一直显示最小的顾客选项.
13 调整布局.
14 保存文件.
联合字段在显示频率上还有两个能力上的限制:
基于联合字段的统计表不能显示大多数统计实体.
在图表中使用联合字段,它将不能创建包含依靠在频率信息之上的函数表达式(例如,SUM,COUNT函数,AVERAGE)除非转变为明显的修改器.
15 关闭文件.如果你希望,可以和文件SystemFinal.qvw进行比较,它在Advanced文件夹下.
16 如果你这时不想同QlikView一起作业,现在你可以退出程序.
为得到更多信息,请参见Reference Manual.


第十八课 成行装载
LESSON 18 LOAD INLINE

在某些案子中,你也许希望在脚本中通过键盘直接地添加需要的资料,这相当于从一个文件或是数据库装载它.在这次课,你将学会如何联机装载.
联机装载也能使用映射(通过一个文件名来联合新的信息和已经存在的信息),这组成本次课的第二个部分.

以联机装载添加记录
Adding a record with load inline
1 开始QlikView,并且打开..\Tutorial\Advanced文件夹下的文件Inline.qvw.
文件的创建来自两个表,Customer.csv和Transact.csv.你希望为文件添加一个顾客,但不改变原文件.操作如下:
2 打开Edit Script对话框.
3 将光标放到脚本的末端,然后操作如下:
Load * Inline [
Customer ID,Customer,Address,City,Zip,Country
1181,Alexander's Catering Service,Fisherman's Drive 4,Portsmouth,BH 354 RW,Great Britain];
第一行(Customer ID,Customer, Address, City, Zip, Country)列出Customer.csv(你希望添加记录的表)中的字段名称.
第二行(1181, Alexander’s Catering Service, Fisherman’s Drive 4, Portsmouth, BH 354 RW, Great Britain)包含将被添加的记录.
开始的星号'*'与'all fields'相等.
注意由于排版上的空间限制,在上面例子中的记录没有在同一行上.当复制这个成行子句进脚本时,你要将全部记录放在独立的一行中,这很重要:Portsmouth等等,将因此跟随在Fisherman’s Drive 4之后.观察Advanced文件夹下的文件InlineFinal.qvw.
4 点击Reload

按钮.
5 点击OK,关闭对话框.
6 没有新字段被添加,但那里有新字段的值在一些列表中.点击列表customer中的Alexander's Catering Service并研究结果.
被括弧包含的数据在成行装载之后是被视为普通表.拥有customer表相同的字段设置,成行装载表将和customer表连接.你能通过研究系统面板非常容易地检查它:在列表$Table(连接表总是给第一个输入表的名称,在本案中,是Customer)中只有两个表被显示.
另存文件为MyInline.qvw或是类似的名称.
自然地,成行装载表能够为其他的目的所使用,而不仅仅是给存在的表添加数据.如果,为一个例子,你希望装载很小的表,在脚本中直接地创建它们比创建和装载一个外部文件要来的容易一些.

为成行装载映射数据
Mapping data with load inline
文件Inline.qvw包含一个关于年度中月份的字段,它像数字那样书写.你希望使用月份拼写名称来创建一个图表,另一个图表显示每个季度的销售,使用数据映射将是很容易的.
数据映射的意思是通过一个字段名联合新信息到已就绪存在的信息.数据映射典型的例子 能够连接一个计算数到另一个计算数或是将一个数据分裂到三个年份字段中,月份和年份,分别显示.数据映射能够使用一个外部文件或是在脚本中直接使用成行装载.
在这个例子中,你将使用成行装载来映射月份数字相对应月份和季度.
此时我们将使用内嵌成行来创建成行装载声明,这通常比在脚本中直接书写来得更为便利.
1 打开Edit Script对话框.
2 将光标放置到脚本末端.
3 点击Inline Data下的Inline Wizard...按钮.
4 打开Inline Data Wizard对话框,看到一个小的电子表格,很像在实际工作中的那样.然而这里的数据单元不支持公式.
5 将光标放到左上角的数据单元中.使用Enter或是'↑↓←→'光标键在临近的单元间移动来输入如下信息.
Month Month Name Quarter
1 January 1
2 February 1
3 March 1
4 April 2
5 May 2
6 June 2
7 July 3
8 August 3
9 September 3
10 October 4
11 November 4
12 December 4
6 最后在每行的首部上方双击并输入字段名Month.在剩下的栏位重复此操作.
如果你需要一个表 例如,Excel,它能通过粘贴的方式输入进QlikView的Inline Data Wizard对话框中.
7 点击OK.现在Edit Script对话框中产生类似脚本:
LOAD * INLINE [
Month, Month Name, Quarter
1, January, 1
2, February, 1
3, March, 1
4, April, 2
5, May, 2
6, June, 2
7, July, 3
8, August, 3
9, September, 3
10, October, 4
11, November, 4
12, December, 4];
8 点击Reload按钮.
两个新字段被添加进Available Fields列表,Month Name和Quarter.成行装载表已经通过字段Month和交易表联合.
The inline table has been associated with the transact table via the field Month.
9 点击OK.
10 创建一个柱状图,显示每季

度的销售(选择Quarter为显示维度,并添加表达式'Sum (Sales)').在本案你需要帮助,请参见Working with QlikView.
11 保存文件.如果你希望,可以和文件InlineFinal.qvw进行比较,它在Advanced文件夹下.
12 如果你这时不想同QlikView一起作业,现在你可以退出程序.


第十九课 字段组和循环展示
LESSON 19 FIELD GROUPS AND CYCLIC DISPLAY

像图表中的维度那样替代显示单一字段,为了达到这个目的可以定义字段组.和字段组一起作业允许你使用非常有效的方式来显示数据,至此将引起图表由于字段的选取而在一个分层的(下钻)或循环的顺序中显示.在这次课,这些重要的特征将被解释:你将分别定义分层的和循环的字段组并创建相应的图表.
在图表中字段组的使用应该不会导致循环展示的混乱.循环展示,组成本次课最后的部分,能够适用与任何包含多个表达式的图表,表达式的结果会顺序的显示.就好像使用字段组,但他占用空间并允许你迅速改变在图表中的数据显示.

字段组
Field groups
在QlikView和许多其他数据库观察者,OLAP等等,它们之间存在一个主要的不同.在QlikView中这里不需要在输入的数据中预先定义任何层次.QlikView独一无二的逻辑联合给你完全的自由度来存取任何字段,就好像在任何序列中都拥有一个完全的维度.为了更多用途这个自由度是极端强大的.
无论如何,那种场合是当一个预先定义的层次能够实际地帮助你来更有效的显示数据.QlikView因此提供定义字段组的可能.组能够分层(下钻)或是不分层(循环).

创建下钻组
Creating a drill-down group
当若干个字段来自自然的层,它产生创建下钻组的感觉.
1 开始QlikView,然后打开..\Tutorial\Advanced文件夹下的文件Groups.qvw.
2 选择Settings菜单下的Document Properties...切换至Groups页.
3 点击New...按钮.打开Group Settings对话框.在Group Name处改变默认名称为Time.
4 在Available Fields列表中选取Year,Quarter和Month至Used Fields下.
5 将顺序排成自上而下:Year,Quarter,Month.这非常重要,至此组中字段的顺序符合了图表中的展现顺序.
6 点击两次OK.
现在你创建了一个下钻组,在图表中你能像使用维度变量那样使用它.

创建和使用下钻图表
Creating and using a drill-down chart
为了创建下钻图表,操作如下:
1 切换至面板Sales,然后点击toolbar中的Create chart按钮.
2 在Window Title下输入Drill-down,然后点击Next >来到Dimensions页.
之前创建的Time组被列出普通的字段名.然而,能够很容易的区分它们:在字段组的前面总是伴随着特殊符号.下钻组,这个符号是一个'↓'箭头.
3 选取Time移动至Used Dimensions下.
4 点击Next >.
5 自动打开Edit Expression对话框,组成表达式Sum (Sales),然后点击Paste,然后点击OK.
6 在Label处输入Sales,

点击Next >.
7 点击Next >直到你达到Colors页.选中Multicolored.
8 点击Next >来到Number页.
9 在Number页,选中Integer.在Thousand Symbol处输入1000$,然后点击Finish.
图表,显示每一年度的总销售,就像所有其他柱状图那样.然而,一旦你进行选取将导致字段Year变成只有一个可能的值,你发现它的下钻特征:
10 在图表中选取柱体2002.
一个普通的图表现在会显示一个柱体,来描述2002年度的总销售.然而,这个图表显示2002年度每一季度的总销售(在字段列表中的第二个字段定义从Quarter开始).
11 选取描述为第四季度的柱体.
图表转变为显示所选季度中每个月的总销售.Month是第三个,也是最后一个在字段组中的字段.
在层次字段中,一旦多于一个值成为可能,图表会自动向后钻.为了回到层次中,点击上钻图标去到下一个字段名.

创建循环组
Creating a cyclic group
有时候将字段组成组也许有用,他不能来自天然层次或者甚至通常是什么都没有.基于此原因能在图表中快速改变数据显示并占用空间.
任何字段能够在循环组中组合在一起.
1 选择Settings菜单下的Document Properties...切换至Groups页.
2 点击New...按钮.打开Group Settings对话框.在Group Name处改变默认名称为Cyclic.
3 在Available Fields列表中选取Country,Salesman和Year至Used Fields下.当定义循环组时字段在列表中的顺序不是很重要.
4 选中Cyclic Group选项.
5 点击两次OK.
现在你创建了一个循环组.在图表中你能像使用维度变量那样使用它,它将允许你当保持相同的表达式(Y轴)的时候,在字段组(X轴)之间转变.

创建和使用循环图表
Creating and using a cyclic chart
为创建循环图表,操作如下:
1 点击toolbar中的Create chart按钮.
2 在Window Title下输入Cyclic,然后点击Next >来到Dimensions页.
Cyclic组被列出普通的字段名.就像drill-down(Time)组那样,在它前面伴随着特殊符号.Cyclic组,这个符号是一个圆形箭头.
3 选取Cyclic移动至Used Dimensions下.
4 点击Next >.
5 自动打开Edit Expression对话框,组成表达式Sum (Sales),然后点击Paste,然后点击OK,关闭对话框.
6 在Label处输入Sales,点击Next >.
7 点击Next >.在Sort页,选中Sort by下的Y-value并下拉选取Descending.点击Next >.直到你达到Presentation页.
8 在Presentation页,选中Max Visible Number(1-100),输入10.
9 点击Next >直到你达到Colors页.选中Multicolored.点击Next >到达Number页.
10 在Number页,选中Integer,并在Thousand Symbol处输入1000$,然后点击Finish.
最初,你的图表显示了每个国家的总销售,这个字段在字段列表中是第一个.
11 通过点击图表的右下角的圆形图标转换到下一个字段,第二个字段,开始被显示.
12 如果你再点击图表,将显示每年的总销售.Year是字段组中的第三个也是最后一个.当列表中最后

一个字段被使用,将会转换回到第一个字段.图表能够无限的循环下去.
也能够通过右键点击圆形图标,一个包含循环组中的字段列表被显示出来便于直接选取.
13 最小化图表.
这个方法中在一个框架里显示三个图表是显示数据非常有效的方法.也允许你快速转换图表显示数据.

循环展现表达式
Cyclic display of Expressions
图表Properties对话框中的Expressions页提供一个命名组按钮.如果你有一个带有两个表达式的图表,你能选择顺序地显示它们用来代替同时的显示方式.在表达式间进行转换是通过一个类似循环图表中的按钮来完成.
The Expressions page in the Chart Properties dialog provides a button named Group.
为创建一个图表来循环展现表达式,操作如下:
1 点击toolbar中的Create chart按钮.
2 在Window Title下输入Cyclic Display,然后点击Next >来到Dimensions页.
3 选取Year移动至Used Dimensions下,然后点击Next >.
4 自动打开Edit Expression对话框,组成表达式Sum (Sales),然后点击Paste.
5 点击OK.表达式现在被显示在Expressions页上.注意,Group按钮是不可点击状态:你需要在图表排列中有两个表达式,才能使用它.
6 点击Add按钮来添加第二个表达式.
7 此时,创建表达式Count (Sales).
8 点击Paste,然后点击OK.现在Group按钮可以使用了:点击它.
9 点击Next >直到你到达Colors页.选中Multicolored.点击Next >.
10 在Number页,(为第一个表达式)选中Integer,并在Thousand Symbol处输入1000$,然后点击Finish.
图表看起来像普通的柱状图,显示每年的总销售.
然而,在左下角的圆形图标指出图表有更多潜在的内容.
11 点击圆形图标.
现在图表转换成显示不同年份间执行的销售计数:

细心的朋友一定发现,英文教程里面这里的图片中显示的表达式是Count(DISTINCT Sales),即,独立计数.而按照之前教程中的内容我们设置的是Count(Sales),改过来很容易:
11.1 将图表切换到Count(Sales)显示.
11.2 进入图表的Properties对话框.切换至Expressions页.在Definition处更新你的表达式(更新前用鼠标在Sales和正括号之间左键点击,会出现表达式提示,本案中的提示内容是'int Count([DISTINCT][ALL][TOTAL] expr)').
11.3 如果你的Definition下面是灰色的,呵呵,可以通过先切换到其他页面,然后再切换回来,你将发现...
11.4 这是教程中没有提到的内容,但实际应用中会用到.

当然,你能够用相同的方式来选择显示多于两个表达式的内容.也能够在强大的多维图表中联合组和循环显示.只有你的想象力是有限的.
12 保存文件.如果你希望,可以和文件GroupsFinal.qvw进行比较,它在Advanced文件夹下.
13 关闭文件.如果你这时不想同QlikView一起作业,现在你可以退出程序.


第二十课 装载交叉表
LESSON 20 LOADING CROSS TABLES

交叉表

是普通类型的表,其特性是一个矩阵值由两个相互垂直的列表头部数据组成.通过使用QlikView交叉表声明,你能通过一个非常优雅的方式来装载这种类型的表.在本章中将描述这一过程.

装载交叉表
Loading a cross table
你将通过观察在Excel(或是一个类似的程序)中的交叉表来开始:
找到..\Tutorial\Advanced\Data Sources目录下的文件Crosstable1.csv,双击它.
微软电子表格打开文件.它看起来就像下面的内容:
Year Jan Feb Mar Apr May Jun
1991 45 65 78 12 78 22
1992 11 23 22 22 45 85
1993 65 56 22 79 12 56
1994 45 24 32 78 55 15
1995 45 56 35 78 68 82
如果这个表已使用通常的做法装载进QlikView,结果将会是一个字段Year和一个代表每个月份的字段.这通常不是你所希望的:你多半希望有产生三个字段,一个代表每个头部的类别(Year和Month)然后一个代表存在矩阵中的数据值.
通常你将从装载表进QlikView中来开始:
1 关闭文件.
2 开始QlikView,并在文件菜单上选择New.使用文件名Crosstable.qvw将其保存进Advanced文件夹.
3 打开Edit Script对话框.
4 点击Data From Files下的Table Files按钮,找到文件Crosstable1.csv并点击Open.
5 如果Table Files Wizard能够正确地解析,点击Finish.
现在Edit Script对话框中产生类似脚本:
LOAD Year,
Jan,
Feb,
Mar,
Apr,
May,
Jun
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\Crosstable1.csv] (ansi, txt, delimiter is ',', embedded labels, msq);
6 通过点击Reload按钮来装载文件.
7 打开Sheet Properties对话框,添加除系统字段外所有字段到Fields Displayed in Listboxes下.
8 然后点击OK.跟着在你的屏幕上出现了一组列表.
9 这显然不是你想要的.再次打开Edit Script对话框.
10 现在添加前缀crosstable到你的装载声明首部,指出那个表是要装载成一个交叉表,前缀crosstable将会跟随一个括弧,其中包含你所希望适合的新字段:
CROSSTABLE (Month, Sales) LOAD Year,
Jan,
Feb,
Mar,
Apr,
May,
Jun
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\Crosstable1.csv] (ansi, txt, delimiter is ',', embedded labels, msq);
11 点击Reload按钮.移动字段Month和Sales到Fields Displayed in Listboxes下(字段Year已经在那里了),点击OK.
列表变成了三个Month,Sales和Year.
这个值分布产生更多信息.为改变排序种类并在列表中显示栏位数字,请参见'第三课 列表和统计表LESSON 3 LIST BOXES AND STATISTICS BOXES'.
12 如果你喜欢,你能删除已过时的(现在为空的)列表.
13 保存文件,然后关闭它.

装载交叉表和多于一个正规的字段
Loading a cross table with more than one regular column
在此之前交叉表是经常通过一个正规的字段数,它将被直截了当地装载.在本案中使用如下表(Crosstable2.csv):
Salesman Year Jan Feb Mar Apr May Jun
A 1991 45 65 78 12 78 22
A 1

992 11 23 22 22 45 85
A 1993 65 56 22 79 12 56
A 1994 45 24 32 78 55 15
A 1995 45 56 35 78 68 82
B 1991 57 77 90 24 90 34
B 1992 23 35 34 34 57 97
B 1993 77 68 34 91 24 68
B 1994 57 36 44 90 67 27
B 1995 57 68 47 90 80 94
在这个表中矩阵栏位在之前是通过两个正规的字段.你可能希望QlikView显示表中四个字段的内容:
Salesman,包含第一个(正规的)字段的值
Year,包含第二个(正规的)字段的值
Month,包含剩下字段的首部
Sales,包含剩下字段的值
为了获得这个结果,操作如下:
1 在文件菜单上选择New.使用文件名Crosstable2.qvw将其保存进Advanced文件夹.
2 打开Edit Script对话框.
3 点击Data From Files下的Table Files按钮,找到文件Crosstable2.csv并点击Open.
现在我们将使用特别的方式来创建交叉表声明.
4 点击Next >.这将带你到最后一个页面.
5 点击Crosstable...按钮.
6 QlikView询问Salesman合格的字段(正规字段).点击Yes.
7 QlikView询问Year合格的字段.点击Yes.
8 QlikView询问Jan合格的字段.点击No.
9 现在QlikView询问属性字段的名称.例如,新字段包含月份名称.输入Month并且点击OK.
10 现在QlikView询问数据字段的名称.例如,字段联合了销售数字.输入Sales并且点击OK.
11 在预览框中现在你能看到转换后的表.点击Finish.现在Edit Script对话框中产生类似脚本:
CROSSTABLE(Month, Sales, 2)
LOAD Salesman,
Year,
Jan,
Feb,
Mar,
Apr,
May,
Jun
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\Crosstable2.csv] (ansi, txt, delimiter is ',', embedded labels, msq);
注意那个前缀crosstable有数字2代表第三个参数.这标示在原表中正规的栏位数.如果这里没有参数,将使用参数1.
12 点击Reload按钮.
13 打开Sheet Properties对话框.移动字段Salesman,Year,Month和Sales到Fields Displayed in Listboxes下,然后点击OK.
14 保存文件,然后关闭它.如果你这时不想同QlikView一起作业,现在你可以退出程序.
为得到更多信息,请参见Reference Manual.


第二十一课 列表中的与模式
LESSON 21 AND-MODE IN A LIST BOX

两个在不同列表中的选取总是被解释为合乎逻辑的.例如,QlikView将显示出这两个选取已联合的所有字段值.在列表内部的多个选取不论如何都是合乎逻辑的.例如,QlikView将显示任何已被选取的进入已联合数据的值.
在下面的环境中,一个在列表内部的多重选取能够设置为逻辑的,并且QlikView将只显示已被选取的进入已联合数据的值.
这次课的特色,列表设置为与模式,你不但使用普通的选取,而且也进行非选取的操作.你在下面的环境学习将列表能设置成与模式.

产生一个与选取
Making an and-selection
在文件夹..\Tutorial\Advanced下的文件And.qvw中,那里有这样一个列表:
In the file And.qvw in the ..\Tutorial\Advanced directory, there is such a list

box:
1 开始QlikView.
2 打开文件And.qvw.
3 选择标签Geography,并找到列表Membership.
这是一个机构列表和属于不同国家地区面积.一个国家能有若干个团体,并且一个团体能拥有多个成员.因此在字段Country和Membership之间是一个多对多的关系.此外,字段Membership没有直接的连接到其他字段,但Country有.在这样的环境下,字段Membership能够设置为与模式.在Membership中一个多重选取将被解释为'只显示国家和它们所有已选取组织的成员'
4 在列表Membership上点击右键,在浮动菜单上选择Properties...切换至General页.
5 选中And mode,点击OK.
6 选取Europe.
现在Europe单元将变成绿色,并且左边有一个'&'符号.团体显示出一个选择的余地(白色),那是在欧洲有一个或多个成员的人.团体将排除在欧洲国家没有任何成员的人.
7 通过Ctrl键选取G-7.
现在你有选取Europe和G-7.例如,在那两个国家中均有成员的人.只有三个(原作这里是四个,但操作的结果是三个)国家是仍然可选的,并且这些在G-7组中的国家中都是欧洲人.

产生一个非选取
Making a not-selection
也可以用类似的方式排除一些国家:
1 通过Ctrl键反向选取G-7.
2 通过Ctrl键选取G-7,保持鼠标按下状态.当单元变成红色时释放按键.
细心的你发现,按照原作操作,当单元变成红色时只有同时释放Ctrl键和鼠标按键才能达成预计的效果.其实在这一步中这样操作就好:通过Ctrl键选取G-7,保持Ctrl键按下状态,释放鼠标,当单元变成红色时释放Ctrl键.
现在你选取了Europe并反选了G-7.现在只有不在G-7组中并且国家中都是欧洲人的为可选状态.这种选取类型被称为强制排除,并且在多对多关系中是非常实用的.
3 关闭文件.如果你这时不想同QlikView一起作业,现在你可以退出程序.

与表的特征
Characteristics of the and-table
不是每个字段能设置逻辑与模式.与模式只可能在如果字段符合双列表的第二栏位时可用.
并且字段必须不能从多于一个表中取出.原因是只有当相关字段只与一个其他字段联合与两者中取其一逻辑上才是有意义的.
最后,在表中必须没有复制的记录.因此这类表总是使用截然不同的断言来装载(请参见Reference Manual).
如果字段通过这种方式装载,在列表Properties对话框中的And mode控制将不再变灰并且列表的逻辑模式能够被改变.


第二十二课 格式化数字
LESSON 22 NUMBER FORMATS

QlikView能够处理文本字符串,数字,日期,时间,时间戳和货币.它们能够分类,以不同数据类型显示并且它们能够参与计算.这个意思是例如日期,时间和时间戳能够和其他类型相加减.
这次课交易用基本的数字声明和数字的格式化.为获取更多细节信息,请参见Reference Manual.

声明和格式化
Interpretation and fo

rmatting
获取正确的数字格式是以下两件事真正的问题:
当数据被加载时对其声明
不同数基数据类型的显示

数据显示在QlikView内部
Data representation inside QlikView
了解数据声明顺序和在QlikView中数字的格式化,是必需知道数据是如何通过程序被存储在内部.所有装载进QlikView的数据是以两种表现来存储,像一个字符串并且又像是一个数字.
1 字符串表现一直是可用到的并且是在列表和其他面板对象中展示.在列表中格式化数据(数字格式化)只影响字符串声明.
2 数字声明只有当数据能够被解释成一个有效的数字时才是可用的.数字声明适用于所有数字的计算和数字的分类.
如果若干拥有相同数字声明的数据项目读取进一个字段,它们将被视为同一个值并且将共用遇到的第一个字符串声明.例子:数字1.0,1和1.000按规则读入将都使用数字声明1并且最初的字符串声明为1.0.

数据声明
Interpretation of data
QlikView试图将输入数据声明为一个数字,日期,时间等等.只要系统默认设置(在Windows XP中的区域和语言选项)在数据中使用并且数字声明变量在脚本中被正确定义,通过QlikView自动处理声明和显示格式化,用户不需要改变脚本或是在QlikView中的任何设置.
1 找到文件夹..\Tutorial\Advanced\Data Sources下的文件Date1.csv.双击它.
2 Excel打开了文件.它由三个字段组成,Date,Customer和Sales.注意在Date字段中的日期被格式化成一致的美国标准格式M/D/YY(M=月,D=日, YY=年份的末两位),在Sales字段中的数字包含一个千位分隔符.
3 关闭文件.
4 开始QlikView,并在文件菜单上选择New.使用文件名Number.qvw将其保存进Advanced文件夹.
5 打开Edit Script对话框.一个确定的数字设置声明,定义分离和通过数字声明变量来格式化数字,已经被自动产生:
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='¥#,##0.00;¥-#,##0.00';
SET TimeFormat='h:mm:ss';
SET DateFormat='YYYY-M-D';
SET TimestampFormat='YYYY-M-D h:mm:ss[.fff]';
SET MonthNames='一月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月';
SET DayNames='星期一;星期二;星期三;星期四;星期五;星期六;星期日';
这些设置是来自你电脑里的区域和语言选项设置,因此被生成脚本的看起来可能与你电脑上的有所不同.这确定一个可重新执行的QlikView脚本,也能在电脑上使用其他区域设置,只要数据字段保持一致.
6 打开控制面板并去到区域和语言选项.
7 看区域选项页,特别是数字和日期,并注意设置符合它们在上面变量的定义.
原作使用的区域是英美的,这里我们使用中国的.
8 关闭控制面板.
数字声明变量可能会被删除,编辑或是自由地复制.如果改变它们,这些声

明将会覆盖掉操作系统的默认设置.
注意那个千位分隔符和日期格式通过数字声明变量来定义,同时在你的文件中使用相一致的格式.QlikView将因此正确地解释所有内容:
9 回到QlikView并点击Edit Script对话框中Data From Files下的Table Files...按钮.
10 找到文件Date1.csv,然后点击打开.
11 如果Table File Wizard做出正确的内容声明,点击Finish.
12 点击Reload按钮执行脚本.
13 移动字段Customer,Date和Sales到Fields Displayed in Listboxes下,然后点击OK.
14 在你的面板上出现了三个列表.移动并调整它们的大小.
如果QlikView有声明内容为有效的数字,那将是容易被发现的:有效数字在列表中一直是向右对齐的,然而值的声明仅仅是文本字符串则是向左对齐的.
Sales和Date两个的内容是右对齐的,你能够推断出它们有正确的声明.
原作这里可能有错误,实际上Date的内容是左对齐的.
15 保存文件并关闭它.
曾经QlikView有声明数据为有效的数字,你可以在列表Properties对话框中使用Number页来申请其他的格式.

改变数字声明格式
Changing the number interpretation format
支持字段的值用英国的日期格式(DD/MM/YY)替代美国的.例如,在脚本开头的格式设置和来自系统的设置不一致:
1 通过点击New按钮来创建一个空白文件,使用文件名Number2.qvw将其保存进Advanced文件夹.
2 打开Edit Script对话框.然后点击Edit Script对话框中Data From Files下的Table Files...按钮.
3 找到文件Date2.csv,然后点击打开.
4 如果Table File Wizard做出正确的内容声明,点击Finish.
5 点击Reload按钮执行脚本.
6 移动字段Customer,Date和Sales到Fields Displayed in Listboxes下,然后点击OK.
7 在你的面板上出现了三个列表.移动并调整它们的大小.
这是,列表Date的值是左对齐的.意思是它们被声明成文本字符串,不是有效的日期.只要这个环境存在,你不能改变字段的数字格式,也不能在字段上做基于它的运算.
通过下面其中一种途径,问题能够被解决:
通过改变控制面板中的系统设置
通过改变脚本中的数据格式设置
通过在脚本中使用一个声明函数

在脚本中改变日期格式
Changing the date format in the script
改变系统设置是通常不是个好主意,除非你装载的大部分字段的类型与你的本地设置不同.在脚本中改变日期格式设置是更好的解决办法(而且,如果你希望一个人有不同的系统设置来为文件使用,这是非常有用的):
1 在你的文件Number2.qvw中打开Edit Script对话框.改变日期格式设置为DD/MM/YY.现在Edit Script对话框中产生类似脚本:
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='¥#,##0.00;¥-#,##0.00';
SET TimeFormat='h:mm:ss';
SET DateFormat='DD/MM/YY';
SET TimestampFormat='YYYY-M-D h:m

m:ss[.fff]';
SET MonthNames='一月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月';
SET DayNames='星期一;星期二;星期三;星期四;星期五;星期六;星期日';
2 通过点击Reload按钮重新执行脚本.
3 点击OK,关闭对话框,然后研究你的文件并注意在列表Date中的值现在向右对齐了.它们已经被声明成有效的日期.
4 保存文件并关闭它.

使用声明函数
Using interpretation functions
如果你装载若干字段,它们有不同的数字格式,你也许希望使用一个声明函数来做替代.声明函数是使用声明字段内容或表达式.操作如下:
1 通过点击New按钮来创建一个空白文件,使用文件名Number3.qvw将其保存进Advanced文件夹.
2 打开Edit Script对话框.注意日期格式又是YYYY-M-D,到现在你不需要改变系统设置.
3 然后点击Edit Script对话框中Data From Files下的Table Files...按钮并且打开文件Date2.csv.
4 如果Table File Wizard做出正确的内容声明,点击Finish.
5 更改脚本如下所示:
5 Modify the script to make it look like below:

LOAD DATE#(Date, 'DD/MM/YY') as Date,
Customer,
Sales
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\Date2.csv] (ansi, txt, delimiter is ',', embedded labels, msq);
Date#是声明函数,Date是已经声明字段,并且DD/MM/YY是你希望字段内容被声明的日期格式依据.语法,和更多的例子,在Reference Manual中可以找到.
6 点击Reload按钮执行脚本.
7 移动字段Customer,Date和Sales到Fields Displayed in Listboxes下,然后点击OK.
研究你的文件并注意Date字段的值被又一次声明为有效的日期.结果与Number2.qvw相同.
8 保存文件.
声明问题应得到不同区分,使用相同的方法解决.
注意当声明日期只有两个位置给年份.例如,YYMMDD,QlikView将假定日期落到一个活动窗口内部,依据来自系统时钟的当前年份,计算-50到+49年.因此88-08-08将被声明为1988-08-08,而44-08-08将被声明为2044-08-08.
文件不是相同的.如果你有一个文件包含不同的格式数据在一个相同的字段中,你能够使用Alt函数.如果字段包含依据具体指明的数字表示的数据格式.请参见Reference Manual.

格式数据
Formatting of data
曾经QlikView有声明数据为有效的数字,在面板对象的properties对话框中,能选择其他数字格式.
1 右键点击列表Date,然后在浮动菜单上选择Properties...
2 切换至Number页.
3 选中Override Document Settings为列表设置一个分隔的数字格式.
4 格式设置成Number.改为选中Date.
5 在Format Pattern处,默认显示为操作系统的日期格式.它能够被改变成任何你选择的其他格式.例子,你也许喜欢标准ISO格式YYYY-MM-DD.擦去Format Pattern处的内容并输入新的格式,或者点击ISO按钮.
6 点击OK.
具体指定的格式已经应用与列表Date中的值.为选择其他日期格

式,简单的再次打开列表properties对话框中Number页,并改变Format Pattern处的内容.
为若干个字段改变数字格式最容易的方式是使用Setting-->Document Properties对话框.
如果字段原来就包含了不同格式的值.例如,某种日期格式是M/D/YY,其他日期的格式是DD/MM/YY,你也许希望恢复到原始的格式.为普通的文本文件,然而,这只可能发生在如果脚本已经重新执行未选中Survive Reload选项(在Setting-->Document Properties...下的Number页中Field Options下)
在Number页上的Default From Input按钮只有是通过ODBC从数据库读取已定义类型字段时才是可使用的.
7 保存并关闭文件.如果你这时不想同QlikView一起作业,你也可以退出程序.
也可以通过在脚本中使用格式函数来设置格式.请参见Reference Manual.
为更多详细的关于数字格式的信息,请参见Reference Manual.


第二十三课 安全
LESSON 23 SECURITY

信息是分布式的,只有那些拥有权利的人才能看到它,这很重要.至此QlikView做预先繁琐的过程来重新获取信息是很简单的任务,很明显那样一个结构必须处理安全问题.在本次课,也是教程的最后一次课,你将给预先创建的文件添加一个权限限制结构.

脚本中的分段
Sections in the Script
权限限制是通过一个或多个采用相同方式装载的表来管理,就像QlikView标准装载数据那样.因此这些表能够存储在标准数据库中.脚本声明处理的安全表在内部给出权限分段,通过声明分段权限在脚本中初始化,请参见Reference Manual.
如果一个权限分段在脚本中已被定义,脚本装载'标准'数据的部分必须在一个不同的分段中,通过声明分段应用来初始化.

权限级别
Access levels
QlikView文件能够核准具体指定用户或是用户组的权限.在安全表,用户是被分配进权限级别ADMIN或USER.如果没有分配权限级别,用户将不能打开QlikView文件.
一个被赋予ADMIN权限的人能够改变在文件中的所有事物.使用Document Properties和Sheet Properties对话框中的Security页,一个被赋予ADMIN权限的人能够限制用户对文件可能的改变.在Reference Manual阅读更多有关这方面的信息.一个人被赋予USER权限的人不能进入Security页.
例子:
Section Access;
Load * inline
[ACCESS,USERID,PASSWORD
ADMIN, A,X
USER,U,Y ];
Section Application;
Load … from …

分段权限系统字段
Section Access system fields
在一个或多个已装载的表中权限级别已分配给用户,在内部使用分段权限.这些表能够包含若干个不同的系统字段,有代表性的USERID和PASSWORD或NTNAME,并且字段定义权限级别,ACCESS.完整设置分段权限系统字段在Reference Manual中有描述.其他字段像.例如,GROUP或ORGANISATION可能已经被添加以便于管理,但QlikView不将这些字段视为特别的方法.
没有,所有,或

少许的结合体的安全字段可能被装载进分段权限分段中.然而,如果ACCESS字段没有被装载,分段权限将不是真正有意义的.
ACCESS
一个字段定义用户将持有的对应权限.
USERID
一个字段应该包含一个可接受的用户ID.QlikView将迅速的为User ID比较这个字段中的值.这个用户ID不同于Windows的用户ID.
PASSWORD
一个字段应该包含一个可接受的密码.QlikView将迅速的为Password比较这个字段中的值.这个password不同于Windows的password.
SERIAL
一个字段应该包含一个数字相应的QlikView连续数字(许可密匙).例子:4900 2394 7113 7304.QlikView将检查用户的许可密匙比较这个字段中的值.
NTNAME
一个字段应该包含一个与Windows NT中用户名或用户组相一致的字符串.QlikView将从操作系统拿来登录信息来比较这个字段中的值.
QlikView将通过字段SERIAL首先比较QlikView许可密匙.在这之后它将询问操作系统是谁已经登陆了.当时,如果是必须的,将迅速的为User ID和password通过字段USERID和PASSWORD来比较它们.
如果Windows用户ID,QlikView用户ID,QlikView密码和许可密匙(连续数字)的结合体在分段权限表中被找到,文件将以相应的权限来打开.如果没有找到,QlikView将否定用户通过至文件.如果用户ID和/或密码不是正确的被输入,在内部三次尝试全部的注册过程必须是重复的.
例子 1:
只有连续数字(许可密匙)是以检查的.一个特殊的计算机得到ADMIN权限.其他的每个人得到USER权限.注意能够使用标记'any license key'来开始.
ACCESS SERIAL
ADMIN 4900 2394 7113 7304
USER *
例子 2:
管理员和拥有许可密匙'4900 2394 7113 7304'的计算机(服务器在QlikView运行批量工作的地方)得到ADMIN权限.当使用用户ID和密码进入'USER'时其他的每个人得到USER权限.
ACCESS SERIAL USERID PASSWORD
ADMIN * ADMIN ADMIN
ADMIN 4900 2394 7113 7304 * *
USER * USER USER
注意在你开始这个练习之前,你应该备份你打算使用的文件.在安全表中一个微小的错误能够导致文件不能再次被打开.

装载安全表
Loading security tables
你有两个表包含安全信息,第一个命名为acclist.csv,第二个命名为accserid.csv.第一个表包含安全字段USERID,PASSWORD和ACCESS,第二个表包含安全字段SERIAL.至此相同联合的逻辑是一个被使用在权限分段中的QlikView戳记,表将通过可选字段COMPUTER NAME来联合.
注意所有装载或选取声明的字段列表在分段权限中必须写成UPPER CASE.任何包含小写字符的字段名在开始通过装载或选取声明读取之前,在数据库中将被转换成大写.然而,用户ID和密码通过终端用户打开QlikView文件的登陆是不做反应的..
USERID PASSWORD ACCESS GROUP COMPUTER NAME
Sharon 7VFI1R ADMIN IT All
Sharon FROMME2U USER IT Al

l
Bob LOVE15 ADMIN Marketing Bob
Bob 15ALL USER Marketing All
Pete NUMBER1 USER Personnel All
Sarah ABSOLUT USER Personnel Sarah

COMPUTER NAME SERIAL
Sharon 1234 5678 9012 3456
Bob 1234 5678 9012 3457
Pete 1234 5678 9012 3458
Sarah 1234 5678 9012 3459
All *
注意许可密匙必须有4*4个空格分隔的数组.
现在你将装载上面的表到QlikView中:
1 打开你想要权限控制的文件.例如,Advanced.qvw.
2 将文件另存为Access.qvw.
3 打开Edit Script对话框.将光标放在脚本的前面,但要在SET声明之后.
4 点击Data From Files下的Table Files按钮.
5 选取文件acclist.csv和accserid.csv(在文件夹..\Tutorial\Advanced\Data Sources下)并点击Open.
6 文件被打开.为这两个文件点击Finish.
7 为表使用权限控制,声明装载它们在分段的部分需要一个位置.输入SECTION ACCESS;在脚本的顶部(在SET声明之后).别忘了分号.
8 为区分来自应用分段的SECTION ACCESS,光标的位置在声明装载安全表之后,此时输入SECTION APPLICATION;别忘了分号.它们指出声明的结束.
你脚本的第一部分现在将产生类似脚本:
SECTION ACCESS;
DIRECTORY;
LOAD [USERID],
[PASSWORD],
[ACCESS],
[GROUP],
[COMPUTER NAME]
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\ACCLIST.CSV] (ansi, txt, delimiter is ',', embedded labels, msq);

LOAD [COMPUTER NAME],
SERIAL
FROM [C:\Program Files\QlikView\Tutorial\Advanced\Data Sources\ACCSERID.CSV] (ansi, txt, delimiter is ',', embedded labels, msq);
SECTION APPLICATION;

Load Country,
Capital,...
DIRECTORY声明具体指定文件的路径.
9 点击Reload按钮执行脚本.
10 点击OK关闭对话框.

下列的进入权限将被授予
Sharon 将拥有从所有计算机进入的权限(至此所有许可密匙被允许).依靠她使用的密码她将被授予ADMIN或USER的进入权限.
Bob 将拥有ADMIN权限当他做在他拥有的电脑前(许可密匙'1234 5678 9012 3457')并且输入他的用户ID(Bob)和密码(LOVE15).当他提供他的用户ID(Bob)和密码(LOVE15)时,他将在所有计算机(所有许可密匙被允许的)上拥有USER权限.
Pete 将在所有计算机上拥有USER权限,只要他提供他的用户ID和正确的密码.
Sarah 将拥有USER权限仅限于使用她拥有的电脑(许可密匙'1234 5678 9012 3459')并提供一个正确的用户ID和密码来打开QlikView文件.

使用Security页
Using the Security pages
人们通过ADMIN特权能够防止确定的命令执行:
1 从Settings菜单中选择Document Properties...
2 切换至Security页.
Security页包含一个QlikView列表.通过反选选项,你能防止文件用户执行相应的命令.
3 反选Add Sheets和Edit Script,然后点击OK.
注意你已经反选的命令现在变暗淡了.例如,为不活动状态.
4 保存文件Access.qvw,然后关闭它并退出QlikView.
在面板Properties对话框中那里也有一个Security页,包含了更多的命

令.

和权限限制一起工作
Working with access restriction
你是Pete并希望同文件一起工作.
1 打开QlikView,然后选择文件菜单.
2 找到文件Access.qvw并点击Open.
3 QlikView提示需要正确的用户ID.输入Pete,然后点击OK.
4 现在QlikView提示需要正确的密码.和Pete一样,你在所有计算机上拥有USER权限.输入你的密码.例如,NUMBER1(大小写不敏感).然后点击OK.
如果你有正确地完成每件事,文件现在被打开并且你能够和它一起工作.注意,然而,你不能添加面板或者是观察脚本,至此这些命令已被阻止活动.你也注意到不能进入Security页:这些页面只对ADMIN用户可用.
如果你希望授予进入文件的所有部分,你需要输入Sharon的用户ID和密码(确保选择的密码能够授予她ADMIN进入权限).
如果你不知道使用那个密码,请参见上文中的'在装载安全表Loading security tables'章节,你会发现有两个用户ID为Sharon,密码7VFI1R对应ADMIN;密码FROMME2U对应USER.
5 关闭文件.如果你这时不想同QlikView一起作业,你也可以退出程序.
在Reference Manual中提供了分段声明的语法.为得到更多关于进入限制的信息,请参见Reference Manual的Appendix.
现在你已经完成全部教程,像你创建你拥有的文件,你定能得到所有资源带来的有利条件.为得到更多信息,请参见Reference Manual.

2008年5月30日14:38:21
范伟强

相关文档
最新文档