Qlik Sense 数据加载编辑-演示

一、循环加载

实际工作中我们经常遇到需要将文件夹中的数据表定期的循环加载到模型中,可以在代码中进行设置。这里借鉴了一些学习资料,如有发现哪里有误,请帮忙指正,谢谢。

  1. 简单循环加载
 # 首先在数据加载编辑器中,创建好新连接-本地工作目录文件夹,命名好文件夹
 # 文件夹中存放有多份文件,一般是按月/日/周更新的数据,数据的字段名称、字段数量、字段顺序都是保持一致的
 # 假设文件夹datafiles 中的文件的格式都是csv
 table:
 Load 
 	"Employee Name",
 	"Job Title",
 	"Base Pay",
 	"Overtime Pay",
 	"Other pay",
 	"Benefits",
 	"Total Pay",
 	"Total Pay & Benefits",
 	"Year",
 	"Notes",
 	"Agency"
 FROM (lib://datafiles/经营月报-*.csv)
 (txt,codepage is 28591,embedded labels,delimiter is ',',msq);
  1. 中度循环加载
# 对于以上的加载。可以用循环来直接对文件进行加载
for each a in '经营月报-2015','经营月报-2016','经营月报-2017'
load * 
from [lib://datafiles/$(a).csv];
next;
  1. 复杂循环加载
 # 如果现在文件中的文件有很多份,不可能一一将文件名字列出,且文件格式不同
 # 分成两步,第一步,先将文件夹路径和文件名字提取出来
 sub DoDir(Root)  
 for each ext in 'csv','xls','xlsx'
 	for each file in filelist(Root&'\*.'&ext) #组成文件的完整路径
 temp:
 	load 
 	'$(file)' as name,   
 	filesize('$(file)') as size,
 	filetime('$(file)') as filetime
 	autogenerate 1;  #自动生成1
 	next file
 next ext
 for each Dir in dirlist(Root&'\*')
 call DoDir(Dir)
 next Dir
 end sub
 call DoDir ('lib://datafiles')  # 传入当前工作路径
 
 # 提取文件生成表
 LET vcount = fieldvaluecount('name')
 fro i = 1 to $(vcount)
 LET vfile = FieldValue('name',$(i)) //从name 列逐行读取
 
 table:
 load 
 "Employee Name",
 "Job Title",
 "Base Pay",
 "Overtime Pay",
 "Other pay",
 "Benefits",
 "Total Pay",
 "Total Pay & Benefits",
 "Year",
 subfield(subfield('$(vfile)','-',-1),'.',1) as YYY
 subfield(subfield('$(vFile)', '-', 1)&'-'&subfield('$(vFile)', '-', 2),'/',-1)  as  city
 from ['$(vFile)'];
 next;
 drop table temp;
 //store  table2 into  [lib://fornext/table together3.qvd]; //是否要将表table2存入文件tbale together3

二、增量加载

实现的逻辑,将历史的数据存放在一张表,这张表不做更新,增量的表每天(周期)更新,存放为另一张表,这张表每天更新

his_data:
load
	订单号,
	订单日期,
	顾客ID
from [lib://在线销售/订单表]
(biff, embedded labels, table is 订单表$)
where 订单日期<='2018/12/31'
//store his_data into [lib://在线销售/hisdata.qvd]; //是否将其存为qvd文件
drop table his_data;

inc_data:
load
	订单号,
	订单日期,
	顾客ID
from [lib://在线销售/订单表]
(biff, embedded labels, table is 订单表$)
where 订单日期>'2018/12/31'
//store his_data into [lib://在线销售/incdata.qvd]; //是否将其存为qvd文件
drop table inc_data;

注意:在sense企业版中,增量刷新可能经常会用到,对于需要实时展示的大量数据,需要将历史不动的数据先存为历史数据文档,将增量的数据存为另一份文件(设定定时刷新的时间,可以是一天等),然后再合并两份文件为总量的数据,合并后的文件的刷新时间设置为增量刷新任务成功时,需要在后台设置刷新时间,刷新的任务在服务器后台qmc的task设置,可在离线的帮助文档中搜qvd

三、服务器版本的相关基本运用

1 创建新的streams

  1. 在ip后加入/qmc,打开后台管理,点击streams,创建新的目录,勾选右边的identification、tags、custom properties,点击apply后,弹出的界面勾选basic的user和name,并将右边的properties项看情况是否要全选
    Qlik Sense 数据加载编辑-演示_第1张图片

2 创建新的app

在工作区新建好app,创建好数据连接,并做好前端界面

3 发布app

点击系统后台的apps,点击做好的apps,点击pubish ,选择发布到哪个pubish

4.设置定时刷新任务

点击系统后台的task,create new ,设置好名字,选择app,选择刷新动作类型,对于历史数据,一般仅需要刷新一次,就选择once,增量数据就具体看周期,比如小时,月、日等;而对于全量数据的刷新,一般等增量数据的刷新完成后再刷新,这时就可以选择create new task event trigger,这是一般在订单出选择增量刷新
Qlik Sense 数据加载编辑-演示_第2张图片
Qlik Sense 数据加载编辑-演示_第3张图片

三、Direct Discovery

使用Direct Discovery有很多的限制,阉割了sense的许多功能,在官方帮助文档中有记载,且这种方式十分耗内存

  1. 首先在Main脚本必须加入两项,不然很多情况下,连接数据库失败
 SET DirectDateFormat = 'YYYY-MM-DD';
 SET DirectMonthNames = '1;2;3;4;5;6;7;8;9;10;11;12';
  1. 直连需要指定dimension 和measure,结尾用DETAIL,生成的直连的字段有标志
 DIRECT QUERY DIMENSION
 "用户ID",
 "咖啡种类",
 "杯型",
 .......
 MESRURE
 "数量"
 DETAIL

在这里插入图片描述

四、关于星型模型

  1. 对于多事实表,中间一张维表的星型模型,加载进数据的时候为了不让多张事实表自动关联,需要在每张表的字段前加前缀区分开,涉及到批量处理
# 此时加载后的两张表的数据字段,前缀分别为table1.和table2.
qulify * ;
table1:
load
用户ID,
产品名称,
数量
from [lib://datafile/sales];
table2:
load
用户ID,
产品名称,
价格
from [lib://datafile/product]
      
 # 但是如果某个字段,想重命名,或者不加前缀,就可以加上unqulify
qulify * ;
unqulify 用户ID;
table1:
load
用户ID,
产品名称,
数量
from [lib://datafile/sales];
table2:
load
用户ID,
产品名称,
价格
from [lib://datafile/product]

五、脚本中自建表

# 现在想要实现创建了两张表,分别存放所有的维度和所有的度量,此时想要在前端界面,通过选择这两张表的维度和度量,相应的其他表格显示内容
dimension:
load * inline[
    dim
    产品类别
    产品子类
    产品名
    地区
    供应商
];
mea:
load * inline[
    measure
    销售额
    利润
    利润率
]
# 创建好了以上两个表格,在前端界面,维度和度量分别作为一个筛选器
# 新建一个表格,拖原始事实表的字段在里面
# 在每个字段的列条件上新增以下语句:
=substringcount(concat(dim,'|'),'产品类别')
#如果是度量,则为:=substringcount(concat(mea,'|'),'销售额')
# 此时如果筛选器中选择产品类别,则在表格中产品类别出现,如果没选择产品类别,则这字段不展示

Qlik Sense 数据加载编辑-演示_第4张图片

你可能感兴趣的:(Qliksense,循环加载,初级入门)