QlikView简明教程.docx
《QlikView简明教程.docx》由会员分享,可在线阅读,更多相关《QlikView简明教程.docx(27页珍藏版)》请在冰豆网上搜索。
![QlikView简明教程.docx](https://file1.bdocx.com/fileroot1/2023-5/29/459a3bda-3de0-4dc7-8a97-2eb42ab1c1e3/459a3bda-3de0-4dc7-8a97-2eb42ab1c1e31.gif)
QlikView简明教程
QlikView简明教程
1写在前面
1.1测试驱动开发(TDD):
测试驱动开发(TDD:
Test-DrivenDevelopment)是指面对复杂的开发任务,开发人员应该从一个最小的功能点开始测试,当测试通过之后再加入新的功能点,知道开发完成。
使用QlikView来挖掘数据,本质上是一个编程的过程,既然是编程就可能在刚开始的时候有BUG,这是毫无疑问的。
我们不能一开始就用真实的全量数据作为开发的基础,这样除了问题非常难于排查原因。
比较合理的做法是,自己创造一个测试环境,这个测试环境开始的时候只提供少量的,可以被开发者非常清楚的掌握的少量数据。
直到用这个少量数据集开发完整个功能之后,再讲开发结果嫁接到真实环境。
其本质上是一种测试驱动开发的过程。
1.2开发人员对业务数据的掌握
QV的开发者不一定对被操作数据有着详细的了解,这时候往往需要业务人员,或者对数据比较了解的人员配合。
否则可能会误用数据,从而导致结果不准确。
比如一对多,和一对一的外键关系计算方式是不一样的,复杂度也不一样。
如果是先没有掌握各个表之间外键的关联关系,很有可能会误用数据。
2前言
本文内容根据之前对QlikView(以下简称QV)的了解和QlikView售前培训总结而成。
简明教程的主要目标就是给一个没有接触过QV的开发人员、项目管理人员能够在最短的时间内学习并掌握QV最常用的功能,可以快速上手。
本文的组织方式,本文从安装QV环境开始,循序渐进、由浅入深。
在关键的一些函数上通常使用示例来和图像力图使读者能够容易理解。
全文分文如下几个方面的内容:
QV介绍、安装、常用控件、变量、表达式、脚本的结构与语法、集合筛选、Aggr。
3QV介绍
3.1QV的产生背景
QV是一种BI(商业智能)软件,集成了ETL和展示的功能。
在QV出现之前,传统BI的一般做法是SQL+ETL+报表工具,如图1所示:
图1
图1所以的开发流程主要是ETL在基础数据库的基础上按照项目需求抽取出新的维度数据方主题数据库中(也可以称作数据集市),从而报表软件直接从主题数据库中直接读取数据库形成报表。
这种做法的弊端是不容易应对变更。
比如维度发生变化时,要求先告知ETL生成新的主题数据,原有的主题要随之删除,否则会造成数据的冗余和管理上的不便。
报表软件也需要跟进,从而和ETL一样做出同样的调整。
这种做法还对主题数据库表的设计提出了更高的要求,如果前期没有很好的设计各个主题的数据库表结构,会导致做大量无用功,生成的报表价值不大。
传统BI数据立方体cubes数据模型:
3.2QV的BI处理模型
从传统BI的处理流程可以看出,问题主要是BI不能及时响应维度变更的需求。
为此BI将数据加载到内存中使用,而不是从数据库加载。
数据放到内存中使得需求变更时可以快速的读取和操作数据。
4第一次使用QV
4.1下载与安装
到官方网站下载对应的版本http:
//ap-注意Win8有专门的版本,其他版本不能安装到Win8上。
也可以到:
下载。
最后你填写完信息之后进入下载页面,作出版本选择,你可能会下载这个:
QlikViewDesktop_x64Setup.exe
默认安装即可。
也可以到下面的网盘下载:
安装完成之后,默认会创建桌面快捷方式,打开如下图所示:
4.2Qvw设计介绍
QV处理和分析数据的一般过程是,建立qvw文件,将数据连接信息、数据清理的操作、数据模型构建、数据压缩存储、图表、变量等全部存储在qvw文件中。
用户每次打开qvw文件时,上述内容会自动呈现,无需再次从数据库或者Excel中加载原始数据,可以继续上一次的编辑和分析工作。
可以使用》文件》新建来创建一个新的qvw文件,这是qvw文件中只有一些初始的信息,如果用户要使用qvw来完成分析还需要从加载数据开始。
4.2.1后台和前台
QV包括前台和后台两部分,其中后台主要提供数据,并对数据进行必要的清洗,后台的脚本可以用编辑脚本按钮
打开。
后台进行数据清洗主要通过LOAD关键字添加标记位、使用条件语句、自带函数等做预处理的方式来实现。
脚本中的内容一般如下:
如果你的数据源发生了改变,需要重新加载数据,点击【重新加载】
按钮即可重新读取数据源。
QV的前台主要是设计界面,在设计界面中可以进行图表的创建,修改查询等操作。
4.3QV读取数据库
如果需要了解详细的qvw从数据库表中读取数据并分析的过程,下面的这个示例完整的展示了具体的细节:
5内存数据模型
为了降低内存占用,QV对内存数据结构做了压缩处理,使得数据库表中每一列重复元素只存储一次。
压缩前数据在数据库表中的存储形式如下图2所示:
5.1数据关联:
5.1.1筛选一个字段就是筛选所有字段
5.1.2什么是数据关联
数据关联类似于数据库中的主键、外键。
如果两个表A、B,其中A的主键A.a_key是B的外键B.a_key,那么QV就会自动将A表和B表关联起来。
关联之后,选择A表中的数据,B表的数据会联动被选择。
表之间的联动显示,是由相同的字段名来实现的。
5.1.3自动内连接
下图是【表格查看器】(后文会有介绍)自动内连接的结果图,说明QlikView会在内部数据结构中自动将字段名相同的各个表用内连接关联。
这样一来,凡是被关联的字段都将作为分组字段,凡是未被关联的字段都将作为表达式字段。
而且,表达式字段都默认以所在表的分组字段自动分组。
5.1.4表的内容模型
表被加载到内存中之后,表中的数据被单独存储在列的内存模型中,表的行数据用引用来维持。
所以在内存中数据是按列来存放的,表是按照网
5.1.5列的内存模型
列的内存模型如下图所示,列到内存中之前可能会分布在多个表中,他们的名字相同,进入内存就会汇聚到同一个列中。
但是关联关系由表来存储。
当然,列也可以用as重命名来改变名字从而达到取消关联的目的。
如果要强调某一列col来自其中某一个表A,那么可以用load关键字给A表增加一列作为标记,在想要区分的时候看看isnull(aggr(标记,col))即可。
如果两个列在同一个表中被加载,那么选择一个列,另一个列就会联动被选中。
如果两个列不在同一个表中被加载,那么这两列通过共同的中间列(名称相同)联动。
5.1.6联动显示的基础
5.1.7QUALIFY加表名
严格区分来自每个表的列。
各个字段对所有字段加上表名用来取消关联。
QUALIFY*;
5.1.8UNQUALIFY
与QUALIFY的作用相反。
下面的例子是对所有表中的【单项编号】字段使用自动关联。
UNQUALIFY单项编号;
注意:
作用范围
可以在任意位置加上表名和取消表名,可以重复使用,每次使用都会影响后续指令的执行,不会影响之前指令的执行。
5.2表格查看器
如果数据已经被加载到内存,通常是多个表,这些表之间的关系通过相同的字段名称来实现。
可以通过【表格查看器】按钮
来查看当前加载的所有表,以及表之间的关联关系
如上图所示,三个表都有“单项编号”这个字段,从而这三个表就发生了关联。
6后台脚本概述
脚本是QV的后台,脚本的功能是将数据加载到内存中供用户使用。
但是往往用户使用的原始数据都不一定完整、或者存在脏数据、有时候甚至需要做一些转换等等。
这种加载数据的同时对数据进行清洗和预处理的工作就是QV的ETL功能。
6.1语句
脚本以语句构成,多个语句用分号隔开
语句是从上到下依次执行。
6.1.1逻辑判断
在帮助文档中输入等于号(=)即可看到所有的逻辑操作符使用方法。
6.1.2集合操作
集合用一对大括号表示:
{}
元素用逗号隔开:
{1,2,3,4}
6.2QV执行SQL语句
参考本文的“QV读取数据库”一节,可以看到QV在加载一个数据库表的时候会生成一条语句,例如:
SQLSELECT"单项编号",
"单项财务收入",
"财务收入确认时间"
FROM"YWW_Temp_Test".dbo."BI_单项财务收入";
关键字SQL表示后面紧接着是一个标准SQL语句。
这个SQL语句一般是【选择】功能自动生成的。
上面的SQL语句功能是从数据库“YWW_Temp_Test”中读取表“BI_单项财务收入”的“单项编号”、“单项财务收入”、“财务收入确认时间”三个字段。
脚本执行完毕就会将上述数据存放到内存中。
6.3LOAD加载数据
QV执行SQL语句可以将数据加载到内存,如果你希望加载到内存之前对数据进行一定的预处理,比如数据清洗、修饰等,就可以使用LOAD关键字来实现。
Load语法是从数据库到内存最后一次加工过程,在这里你可以给表添加新的列,预处理列中的数据。
LOAD语句总是和SQL语句配对执行。
LOAD语句;
SQL语句;
6.3.1从随后的表格中加载数据
LoadA,B,if(C>0,'positive','negative')asX,weekday(D)asY;
SelectA,B,C,DfromTable1;
6.3.2填充特殊值
例如,下面的Load就会数据库中日期为空的值做了特殊值填充处理:
LOAD
"单项合同金额",
"单项编号",
If(IsNull("签回日期"),makedate(1900),"签回日期")As"签回日期";
SQLSELECT"单项合同金额",
"单项编号",
"签回日期"
FROM"YWW_Temp_Test".dbo."BI_合同明细";
6.3.3添加新的列
比如你的项目类型里有各种类型,但你想对这些类型分类:
设计类、非设计类。
你可以想如下这样给你的表加入内存之后添加一列(这里又添加了一列:
单项编号_FROM_单项):
LOAD"单项编号",
'1'as单项编号_FROM_单项,
"项目类型"
if("项目类型"='通信设计'or"项目类型"='建筑设计'or"项目类型"='装潢设计'or"项目类型"='铁塔设计'or"项目类型"='咨询'or"项目类型"='网优','设计类','非设计类')as是否设计类;
SQLSELECT"单项编号",
"项目类型"
FROM"chanzhi".dbo."BI_单项";
加载到内存的结果如下:
7变量与表达式
7.1变量
脚本语言总是离不开变量,在脚本中的QV变量都是全局变量,有一些系统变量,也支持用户自定义变量。
由于语句是按顺序执行,所以要求用户自己要按照一定的规范组织脚本,否则随着要分析内容的增多,会出现脚本难以管理的局面。
如果用户提前预知脚本会越来越复杂,就会定期重构,使其一直处在阅读难度的合理水平。
重构只要能够按照这个原则进行就可以不局限与比较死板的规范。
变量的定义:
定义脚本变量的语法为:
setvariablename=string
或
letvariable=expression
有些语句是自动生成的,比如当你新建一个qvw文档时总会出现下面的语句:
SETThousandSep=',';
SETDecimalSep='.';
SETMoneyThousandSep=',';
SETMoneyDecimalSep='.';
SETMoneyFormat='¥#,##0.00;¥-#,##0.00';
SETTimeFormat='h:
mm:
ss';
SETDateFormat='YYYY/M/D';
SETTimestampFormat='YYYY/M/Dh:
mm:
ss[.fff]';
SETMonthNames='1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月';
SETDayNames='周一;周二;周三;周四;周五;周六;周日';
7.2一般的统计求和方法
8前台设计
8.1数据的显示
数据在被加载到内存中是去除重复的,并使用引用来保持表数据的组织关系。
除此之外,数据并不一定是直接按照数据库中的方式存储的,QV会针对不同的数据保存为不同的类型,而需要展示的时候可以使用外观模式来显示不同的格式。
例如,日期数据在被存放到内存之后可以显示为整数、日期、不同格式的日期。
通常在表格的“数字”属性中会专门制定数据的显示格式,如下图所示:
显示如下:
如果使用默认显示,日期可能会显示成整数:
8.2常用控件
8.2.1工作表
工作表是打开qvw文件时主窗口中最大的一块区域,这里用来设计各种图表。
可以在同一个文件中创建多个工作表,这些工作表使用同一个数据源,在一个工作表中做出的筛选,会让其他工作表联动作出反应。
8.2.2透视表
维度:
一个分组,类似于数据库中的groupby。
对一组之后每隔组内部的多个值交给表达式中的聚合函数来处理
表达式:
维度会对表数据进行分组,分组之后的每一组数据,交给表达式来处理。
所以,表达式通常是一些类似于sum这种聚合函数。
8.2.3垂直表
8.2.3.1垂直表与透视表的对比
透视表:
1.透视表更擅长于数据的分组,在透视表中你可以很轻易的看到指定的行从属于哪个分组当中,并
且每个分组都可以进行部分求和。
2.透视表可以实现和交叉表一样的展现方式,比如一个或者多个平行的维度。
3.透视表在排序的实现方式上,只能按照维度进行分组,先按照第一个维度进行排序然后按照第二
个维度进行排序等等,没有办法按照任意列进行排序。
垂直表:
垂直表在排序方面比透视表强很多,你可以按照任意列进行排序,但是垂直表不擅长数据的分组,
并且也没有像透视表那样的可以进行部分求和。
注:
建议使用透视表。
8.2.4表格框
表格框用来展示数据表中的原始数据,只需要将数据表中的列添加到表格框的属性中即可。
创建表格框的方法如下:
在工作表的空白处右键》新工作表对象》表格框
此时可以在【标题】栏输入表格的名称,可用字段列出了你可以使用的列,选中并添加多个列,即可
自动去除重复:
当仅仅使用一列数据来构建表格框的时候,此列数据会自动去除重复。
8.2.5多选框
多选框可以理解为是一个下拉框,可以将一个列的所有值分组,每组取一个作为一个选项。
有时候我们需要用if表达式的结果来返回两种情况,每种情况可以作为多选框的选择项。
8.2.6垂直表
QlikView的内存结构:
不同于数据库的表结构,QV会自动将字段名相同的所有字段统一存储,并去除重复。
但是数据库表关系仍然存在。
所以,QV中选择一列其实是选择了所有表的这一列(列作为维度与表无关)。
9列表
例如一个单一的表达式也会自动根据表达式字段所在表的分组字段进行分组:
表达式
if(sum(单项财务收入),'有收入','无收入')
A.单项编号=C.单项编号
自动与A表内连接
10透视表
透视表就是以维度为分组条件,表达式展示汇总结果的二维表。
维度
表达式1
表达式2
表达式
表达式
单项编号
Sum(单项合同金额)
Sum(单项财务收入)
if(sum(单项财务收入),'有收入','无收入')
if(sum(单项合同金额),'有合同','无合同')
A.单项编号
A.单项编号=B.单项编号
A.单项编号=C.单项编号
A.单项编号=C.单项编号
A.单项编号=B.单项编号
作为分组去重
自动与A表内连接
自动与A表内连接
自动与A表内连接
自动与A表内连接
变量
变量可以是表达式的结果赋值而成的,这时候变量也可以作为维度来使用。
11AGGR制作虚拟二维表
12快速复制图表到其他文件
如果你有两个qvw文件分别设计了一个不同的视图,但是你想合二为一,怎么办?
这时候可以利用【复制对象】功能将其中一个文件中的表格复制到另一个文件中。
第一步:
复制对象
第二步:
粘贴对象
结果:
13常用函数
我们之所以把常用函数列出来,主要有两个目的:
第一,这些函数的确可以满足你日常需要,如果你不知道这些函数,你可能要大费周折才能实现同样的功能。
第二,方便你的查找,你可能知道有这么一个函数,但是你很容易忘记他叫什么名字。
所以列出来方便你的查询。
函数名
功能
用法
MakeDate(YYYY[,MM[,DD]])
用字符串生成日期
makedate(1999)returns1999-01-01
14更多资源
14.1最好的帮助文档
打开:
可以在QV的开发工具中直接打开帮助文档,这是你看到的是比较全面的各种函数的说明,这通常非常有帮助。
索引:
一般情况下,你只需要知道函数的名字就可以看到详细介绍和用法,非常方便。
支持索引和模糊查询
目录:
有时候你并不一定知道你要找的内容用那个单词可以找到,试试目录吧
14.2在线免费资源
QlikView开发宝典