QlikView学习笔记

  • Post author:
  • Post category:其他




1.脚本关键字



1.1

LOAD

  • LOAD 关键字类似

    SQL

    中select ,用于字段选择

    // 从Employees 中加载字段EmployeeID,Address,BirthDate,City 并将其命名为Employee 的临时表
    Employee:
    LOAD EmployeeID, 
         Address, 
         BirthDate, 
         City
    FROM
    Employees.xlsx
    (ooxml, embedded labels, table is Sheet1);
    



1.2

Resident

  • resident 用于对临时表的引用

    Employee:
    LOAD EmployeeID, 
         Address, 
         BirthDate, 
         City
    FROM
    Employees.xlsx
    (ooxml, embedded labels, table is Sheet1);
    // 防止两表做关联
    NoConcatenate
    Employee1:
    LOAD
    	EmployeeID, 
        Address, 
        BirthDate, 
        City&'AA'
    Resident Employee;
    drop table Employee;
    

    resident 引用临时表,

    NoConcatenate

    防止两表串联 ,&用于字段串拼接



1.3

qualify



  • QlikView

    中只有当两个表中的字段名称完全一样时才能关联,其他情况则放弃关联。

  • 加入QUALIFY 可以防止表进行关联,比如一次加载好多表,不想出现相同字段进行关联

    QUALIFY *;
    Employee:
    LOAD
    	EmployeeID, 
        Address, 
        BirthDate, 
        City
    FROM
    Employees.xlsx
    (ooxml, embedded labels, table is Sheet1);
    Order:
    LOAD 
    	 EmployeeID, 
         CustomerID, 
         OrderDate
    FROM
    Orders.xlsx
    (ooxml, embedded labels, table is Sheet1);
    

    QUALIFY *; 加入QUALIFY * 生成两张单独的表,字段名加了表名前缀,加入

    UNQUALIFY

    可以指明关联的字段

在这里插入图片描述



1.4

unqualify

QUALIFY *;
UNQUALIFY EmployeeID;
Employee:
LOAD
	EmployeeID, 
    Address, 
    BirthDate, 
    City
FROM
Employees.xlsx
(ooxml, embedded labels, table is Sheet1);
Order:
LOAD 
	 EmployeeID, 
     CustomerID, 
     OrderDate
FROM
Orders.xlsx
(ooxml, embedded labels, table is Sheet1);

指明使用

EmployeeID

进行关联,运行结果如下图

在这里插入图片描述



1.5

concatenate

类似于

SQL

中UNION 但有两点不同: 第一点,无论表格是否具有相同的字段名,Concatenate 前缀都可使用;第二点,不会删除相同的记录。如果在 LOAD 语句中使用 DISTINCT 谓语,结果表将会不同。添加到表中的任何数据也会变得不同,不管数据是串联还是联接。

不推荐使用



1.6

NoConcatenate


NoConcatenate

前缀强制将两个使用相同字段集的加载表格处理为两个单独的内部表格(当它们以其他方式自动串联时)。

可以使用QUALIFY *代替



1.7

Mapping

使用原始LOAD加载的数据

region_country:
LOAD Region, 
     Country
FROM
region_country.xlsx
(ooxml, embedded labels, table is Sheet1);

在这里插入图片描述

创建映射表,该前缀可置于


Load





Select (SQL)


语句之前,并将正在加载的语句的结果存储为映像表。

映像表必须有两个字段

,第一个字段包含比较值,第二个字段包含所需的映射值。映射表暂时存储在内存中,执行脚本后将自动删除。 使用 map … using 语句、rename field 语句、

Applymap()

函数或

Mapsubstring()

函数可访问映像表的内容。

MapCountryRegion:
Mapping 
LOAD Region, 
     Country
FROM
region_country.xlsx
(ooxml, embedded labels, table is Sheet1);

使用Mapping 加载的数据

在这里插入图片描述

在一定程度上可以替代关联语句,但是只局限于 映射表只有两个字段,而且当表一个key有多个映射时,会默认只取一个映射。会导致数据缺失。



1.8

ApplyMap

使用映射表

sales:
LOAD ProductID, 
     ProductCategory, 
     Region, 
     SaleAmount,
     ApplyMap('MapCountryRegion',Region,'Unknown') as country
FROM
sales_regions.xlsx
(ooxml, embedded labels, table is Sheet1);

在这里插入图片描述

如果不使用映射表,使用连接的做法是这样

sales:
LOAD 
	ProductID, 
    ProductCategory, 
    Region, 
    SaleAmount
FROM
sales_regions.xlsx
(ooxml, embedded labels, table is Sheet1);
LEFT JOIN
LOAD Region, 
     Country
FROM
region_country.xlsx
(ooxml, embedded labels, table is Sheet1);

在这里插入图片描述

由于关联的 region 键是多对多的关系,导致数据发散,在关联条件是一对一或者多对一的情况下,使用Mapping是可以替代left join 进行映射的,但是存在的问题是Mapping 会自动舍弃一些数据,比如一个key 对应多个value,会只保留第一个key value



1.9

union

  • 字段名一致自动进行UNION



1.10

left join

  • 虽然

    QLIKVIEW

    会根据字段相同来进行关联,但是建议显示的表示关联



1.11

EXIT Script

  • 打断点 脚本执行到EXIT Script 中止



1.12

peek()


QlikView

中的peek()函数用于从以前的记录中获取字段的值,并在计算中使用它。

monthly_salse:
LOAD * Inline
[Month,Sales Volume
March,2145
April,2458
May,1245
June,5124
July,7421
August,2584
September,5314
October,7846
November,6532
December,4625
January,8547
February,3265];
NoConcatenate
LOAD
	Month,
	[Sales Volume],
	peek('Sales Volume') as Prevvolume,
	([Sales Volume]-peek('Sales Volume'))/peek('Sales Volume') as Diffrence
Resident monthly_salse;
DROP TABLE monthly_salse; 

load * inline 是创建自建数据,一般我们用来创建维度 peek() 获取上月数据,可以用来计算 参考资料 https://www.tutorialspoint.com/qlikview/qlikview_peek_function.htm

在这里插入图片描述



1.13 store into

用于保存qvd文件



1.14 filename()

获取文件的名称,在一些特出情况下好用,比如要获取文件的最大更新时间

load
	max(mid(FileName(),6,6)) as max_Time
from .\test_*.xlsx;
let v_today = peek('max_Time');


*

通配符



2.图表函数

# 如果筛选框没有选择年月 默认为当月数据,否则以筛选框数据为准 计算加班
=if(isnull(GetFieldSelections(年月))=-1,
sum({<年月={'$(v_Today_Moth)'}>}正常加班),
sum({<年月={$(=$(v_time))}>}正常加班)
)


注意

:GetFieldSelections() 代表的是鼠标点击传值,

$(=$(v_time))

这个写法是表示引用计算表达式,sum({<年月-={’$(v_Today_Moth)’}>}正常加班),


注意不等于

在QlikView图表函数中表示的是

-=

;sum({<年月={‘202109’,‘202110’}>}正常加班)



3.权限控制

qlikview 使用Excel文件控制权限,权限级别份页签和字段权限

  • 页签权限设置
  • 字段权限设置

设置权限步骤:

  1. 设置–>文档属性–>打开 将基于区域访问权限的初始数据减少 严格排除 勾选

在这里插入图片描述

  1. 设置页签权限

在这里插入图片描述

  1. 脚本中设置权限

    1. 字段权限设置

      SECTION Access;
      star is*;
      LOAD ACCESS, 
           NTNAME, 
           OMIT
      FROM
      [.\权限.xlsx]
      (ooxml, embedded labels, table is colum);
      SECTION Application;
      

      OMIT代表的是设置权限的字段,如果不需要对字段设置权限,默认使用OMIT,保持设置字段的sheet页只有表头

    2. 页签权限设置

      Sheet:
      LOAD //USERID, 
           upper(NTNAME) as NTNAME, 
           ITO_KPI, 
      FROM
      [.\权限.xlsx]
      (ooxml, embedded labels, table is Sheet1);
      

      ITO_KPI代表的是设置页签的名字,要设置多个页签直接后面加

  2. 权限Excel 样式

    • 设置页签的权限

在这里插入图片描述

  • 设置字段的权限

在这里插入图片描述

注意如果要设置用户拥有字段的所有权限可以设置为

*

,但是设置为

*

的前提是要让Excel知道

*

总共有几种,所以一般建议admin ,将所有情况进行遍历,其他用户如果要拥有所有权限设置为

*

在这里插入图片描述



4.导出到Excel

导出Excel适用于报表之间引用,逻辑复杂,直接导出在另一个报表中引用(适用与图表中很多计算,无法再脚本中直接 store into 保存),在工具–>编辑模块 中编辑 VB脚本

sub Export2Excel
	vPath =".\test"
	set obj  = ActiveDocument.GetSheetObject("CH25")
	obj.ExportEx vPath&"\FCST_VBA_TEST.csv",1
end sub

一般建议不要再图表中进行过多运算,运算都在脚本中进行计算,这样便于复用



5.常用快捷键


  • Ctrl + E

    : Edit 编辑脚本

  • Ctrl + L

    : Load加载数据

  • Ctrl + T

    : Table 查看数据模型

  • Ctrl + G

    : design grid

  • Ctrl + M

    : edit module

  • Ctrl + Alt + V

    : variable overview

  • Ctrl + Alt + E

    : expression overview

  • Ctrl + Alt + S

    : sheet properties

  • Ctrl + Alt + D

    : document properties



版权声明:本文为weixin_44446122原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。