走近QlikView - 变量的使用

浏览: 6522
变量在QlikView中的使用随处可见,从简单控件到复杂的表达式,从后台ETL脚本到前端报表设置,处处都可以见到他的身影。变量可以存储一个静态的值也可以被动态的计算,那么他什么时候会被计算?在后台脚本执行的时候还是用户点击之后?他们如何被调用?什么时候使用$扩展符什么时候不使用?如果你对这些问题都有疑问的话,那么请大家跟我一起走近QlikView来探索变量的奥秘。

一种最基本的变量定义是在后台脚本中使用Let声明语句,比如:
Let vToday = Num(Today()) ;
这种情况下,表达式会在脚本运行期间被计算并且将结果返回给该变量,并且该变量是一个数字类型的值。如果你想在表达式里使用一个数字类型的变量作为参数的话,那么该变量将会是一个不错的选择。

但是如果你打算让表达式随后才被计算,比如说当用户点击之后,那么又该如何?一种方法是将表达式作为一个字符串储存到变量里,可以用Set或者Let生命语句或者在设置->变量概述里面创建。
Set vSales = Sum(Sales);
Let vSales = ‘Sum(Sales)’;
在以上两种情况,表达式的值都不会被计算,变量只包含了字符串‘Sum(Sales)’,对用过变量的人来说,他们常常会以$(vSales)的方式出现在表达式当中。用了$扩展符,QlikView会在表达式的值被评估之前将$(vSales)替换成Sum(Sales),而接下来的计算将会基于该表达式的结果。
总的来说会有两步的操作:
1.    变量扩展
2.    表达式被评估和计算

从下图可以看到,同样一个变量在使用和不使用$扩展符的具体执行步骤和结果。

pic7-1.png

另外一种要说明的情况是如果在变量赋值的时候加了’=’号,那么Sum(Sales)就会在变量被扩展前被评估和计算并且返回相应的值,相当于以下三步的操作:
1.    变量计算
2.    变量扩展
3.    表达式被评估和计算
下图展示了这三种情景下的比较:

pic7-2.png

 
有了以上这些知识,我们就可以做很多有趣的事情,比如说我们可以根据用户的选择条件来有条件的进行运算。
比如:
1.    创建一个字段’[Field to Aggregate]’,该字段包含了两个字符串类型的值,分别是销量和金额。
2.    创建一个变量vConditionalAggregationField = '=Only([Field to Aggregate])';
3.    创建一个图表,该图表包含了表达式= Sum($(vConditionalAggregationField))
这样我们就可以在图表里根据我们所选择的条件动态的计算出销量和金额。

pic7-3.png

 
这只是变量应用中的一个很小的例子,合理的使用会让你的报表变得更加灵活,但是也要把握好一个度,因为过量的使用会使后台的逻辑变得难以理解和维护。
 
推荐 5
本文由 曹浩 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

又见到曹老师的文章了,受用!
您好!我实验了一下,还是有些什么地方不正确,请您指正。
我的代码如下:
ItemMy:
LOAD * Inline
[field_to_display
'科室人数'
'实发效益'
'收入基数'
];
Let vConditionalAggregationField = '=Only([field_to_display])';

在qlik sense desktop 2.2中,做了一个选择筛选器窗格,设定为指定的列:field_to_display。然后创建了一个折线图,设置标题为 【='$(vConditionalAggregationField)'&'--汇总显示'】能够正确在界面上显示。设置度量值的定义为:【sum({<指标分类={'$(vConditionalAggregationField)'}>} amount) / 10000】。问题是,这个度量值好似没有起效,显示的数值没有经过指标分类的条件约束。
CC 求个同比的做法!

要回复文章请先登录注册