Qlikview集合分析

集合分析

集合可用于聚合函数。聚合函数一般用于聚合当前选择范围定义的可能记录的集合。但替代记录集合可由集合表达式定义。因此,集合在概念上与选择范围类似。

在使用中,集合表达式时总是以波形括号开始和结束,例如:{BM01}。

集合标识符

可以用一个常数表示记录集 1。记录集表示应用程序中所有记录的完全集合。

符号 $ 代表当前选择项范围内的记录。因此,陈述集合表达式 {$} 与不陈述集合表达式的意义等同。更有趣的是,{1-$}定义了当前选择项的反置,即指未包括在当前选择项中的所有数据。

后退/前进堆叠中的选择项可用作集合标识符。比如,可用货币符号:$1 代表先前选择项,其等同于单击后退按钮。同样,$_1 则代表前进一步,其等同于单击前进按钮。任何无标记的整数都可用于表示后退和前进动作,如 $0 代表当前选择项。

最后,书签也可用作集合标识符。注意,只有服务器和文档书签才能作为标识符使用。书签 ID 或书签名称都可以使用,如 BM01 或 MyBookmark。仅选择的书签部分可用。不包括值。因此,就不可能为集合分析在书签中使用输入字段。

示例:

sum( {$} Sales )
其可返回当前选择项的销售额, 即如同 sum(Sales)。

sum( {$1} Sales )
其可返回之前选择的销售额。

sum( {$_2} Sales )
其返回下两个选择的销售额,即前进两步。如果执行两次后退操作才会用到。

sum( {1} Sales )
其返回应用程序中的总销售额,忽略选择项而不是维度。例如,如果在图表中使用产品作维度,则每样产品将得到一个不同的值。

sum( {1} Total Sales )
其返回应用程序中的总销售额,忽略选择项和维度。即如同 sum(All Sales)。

sum( {BM01} Sales )
其可返回书签 BM01 的销售额。

sum( {$1} Sales )
其可返回书签 MyBookMark 的销售额。

sum({Server\BM01} Sales)
其可返回服务器书签 BM01 的销售额。

sum({Server\BM01} Sales)
其可返回文档书签 MyBookMark 的销售额。

集合运算符

一些集合运算符可以在既存的集合表达式中使用。如上所述,所有集合运算符将集合作为操作数并返回集合形式的结果。

+ 并集运算符。此二元运算返回两个集合操作数中所有记录构成的集合。

- 排除。此二元运算返回由属于第一个集合操作数但不属于另一个集合操作数的记录构成的集合。如用于一元运算,则结果是补集。

* 交集运算符。此二元运算返回两个集合操作数共有记录构成的集合。

/ 对称差集(异或运算)运算符。此二元运算返回包含于两个集合操作数中但不为它们所共有的记录构成的集合。

运算符优先级是: 1)一元负运算符(补集),2)交集和对称差集运算符,3)并集和排除运算符。在同一组内,从左至右判断表达式。非优先级顺序可由标准括号确定,由于集合运算符不可交换顺序,所以括号可能很有必要,例如,A + (B – C) 与 (A + B) – C 不同,反过来与 (A – C) + B 也不同。

示例:

sum( {1-$} Sales )
其可返回除当前选择项以外的所有销售额。

sum( {$*BM01} Sales )
其可返回包括在当前选择项与书签 BM01 中的销售额的交集。

sum( {-($+BM01)} Sales )
其可返回未包括在当前选择项与书签 BM01 中的销售额。

注意!
当集合运算符与包括多个QlikView 表格字段的基本聚合表达式同时使用时,可能造成不可预知的后果,应避免此种情况。例如,如果数量和价格两个字段来自不同表格,那么应避免使用表达式sum({$*BM01}Quantity*Price).

集合修饰符

通过添加或更换选择项可修改集合。此类修改可写入集合表达式。集合修饰符包括一个或几个字段名称,每个字段后均有属于此字段范畴的选择项,所有选择由< 和 > 括起来。例如: 。字段名称和字段值可以照常引用,例如:<[Sales Region]={’West coast’, ’South America’}>。

以下有几种定义选择范围的方法:一种简单的做法是根据其他字段已选值定义选择范围,例如:。修饰符将获得源于DeliveryDate的已选值,并将其作为选择项应用于OrderDate。如果字段包括很多不同特殊值(数百个),则该操作是 CPU 密集型的,应避免此操作。

然而,最常用的选择范围是将字段值扩于波浪括号内,各值由逗号分隔,如下所示:。波浪括号中定义的是元素集,所含元素可以是字段值或字段值搜索。搜索通常由双引号定义,例如: ,其表示将选择包括字符串‘garlic’的所有原料。搜索不区分大小写,并且会在不包含的值上进行。

空白元素集,明显的例子如 ,不明显的例子如 (未搜索到匹配记录),这些均表示没有产品,即其得到的记录集不与任何产品相关。注意:设置不能通过普通选择创建,除非在其他字段中选择,例如:TransactionID。

最后,对于字段输入模式,仍有可能需要强制排除。如果要强制排除特定字段值,需要在字段名称前加“~”。

集合修饰符可用于集合标识符中,也可单独使用。它不能用于集合表达式。当用于集合标识符中时,应在集合标识符后立即写出修饰符,例如,{$}。单独使用时,就等于修改当前选择范围。

示例:

sum( {1} Sales )
其返回 US 区域的销售额,忽略当前选择项。

sum( {$} Sales )
其返回当前选择项的销售额,但是移除“区域”选择。

sum( {} Sales )
返回与上一例相同的销售额。当省略设置修改时,则假设 $。

注意!
上两例的语法被解释为在“区域”中“没有选择项”,即所有区域可以给定其他选择。它不等同于解释为没有区域的语法 (或在等号右侧的任意文本默认得出空白元素集)。

sum( {$} Sales )
其返回当前选择项的销售额,但在“Region”中有“Year” 的新选择。

sum( {$<~Ingredient = {“*garlic*”}>} Sales )
其返回当前选择项的销售额,但强制排除所有包含‘garlic’字符串的原料。

sum( {$} Sales )
其返回当前选择项的销售额,但应在字段“Year”中选择所有以数位“2”开头的年份,例如:2000 及其之后年份。

sum( {$} Sales )
如同上例,但包括 1980 年。

sum( {$1978<2004”}>} Sales )
如同上例,但包含数值搜索,以便指定任意范围。

集合修饰符和集合运算符

如上所述,字段中的选择可以使用集合运算符定义并可在不同元素集中工作。例如:修饰符 表示除“1997”年外,还将选择以“20”开头的年份,同时不包括“2000”。

示例:

sum( {$} Sales)
其返回当前选择项的销售额,但要添加“OurProduct1” 至选中产品列表中并从产品列表中移除“OurProduct2”。

sum( {$} Sales )
其返回当前选择项与字段“Year”中额外选择项的销售额,即:1997 和 所有以“20”开头的年份,但是不包括 2000。注意:如果当前选择项中包含 2000,它也将在修改后被包括进来。

sum( {$} Sales )
其返回与上例相同的销售额,即使初始时当前选择项中包括 2000,它也将被排除在外。该例显示的是使用括号定义优先顺序的重要性。

sum( {$} Sales )
其返回当前选择项的销售额,但在“Year”中选择除 2000 年之外的所有年份;并仅指包含字符串‘bearing’的产品。

集合修饰符使用赋值和默认集合运算符

以上表示法定义了新的选择范围,忽略了字段的当前选择范围。然而,如果想在字段内的当前选择范围的基础上添加新字段值。例如,此时可能需要这样的修饰符 。一个简短而等义的写法是 ,即以赋值运算符默认定义并集。同样,交集、补集和对称差集可由赋值运算符默认定义为 “*=”, “–=” and “/=”。

示例:

sum( {$} Sales )
其返回当前选择项的销售额,但使用使用默认并集添加产品“OurProduct1”和“OurProduct2”至选中产品列表。

sum( {$} Sales )
其返回当前选择项的销售额,但使用使用默认并集添加在选择中添加:1997 和 所有以“20”开头的年份,但是不包括 2000。注意:如果当前选择项中包含 2000,它也将在修改后被包括进来。如同

sum( {$} Sales )
其返回当前选择项的销售额,但仅为当前选中产品与“OurProduct1”产品的交集。

集合修饰符和货币符号扩展

变量和其他货币符号表达式可以在集合表达式中使用。

示例:

sum( {$} Sales )
其返回与当前选择项相关的上一年份的销售额。此处,包含相关年份的变量 vLastYear 被使用在货币符号表达式中。

sum( {$} Sales )
其返回与当前选择项相关的上一年份的销售额。在这里,货币符号表达式被用于计算上一年份。

集合修饰符和高级搜索

使用通配符和聚合的高级搜索可以用于定义集合。

示例:

sum( {$–1} Sales )
其返回当前选择项的销售额,排除产品名中包含‘Internal’或‘Domestic’的产品的交易。

sum( {$} Sales ) > 1000000”}>} Sales )
其返回当前选择项的销售额,但在字段 “Customer” 中有新选择:仅选择在 2007 年中总销售额超过 1000000 的客户。

集合修饰符带有默认字段值定义

在上述示例中,所有字段值均已明确定义或通过搜索定义。但是,还可使用嵌套集合定义定义字段值集合。

在这种情况下,必须使用 Element 函数 P() 和 E() ,分别呈现正值的元素集和字段排除值。在括号内,可以指定一个集合表达式和一个字段,如 P({1} Customer)。这些函数不能在其他表达式中使用:

示例:

sum( {$} Customer)>} Sales )
其返回当前选择项的销售额,但仅限于购买过‘Shoe’的客户。Element 函数 P( ) 可返回可能客户列表,即通过选择产品字段内的“A”暗指的客户列表。

sum( {$})>} Sales )
结果如上。如果省略 Element 函数中的字段,该函数将返回外部任务中指定字段的正值。

sum( {$} Supplier)>} Sales )
其返回当前选择项的销售额,但仅限于提供过‘Shoe’的供应商。Element 函数 P( ) 可返回可能供应商列表,即通过选择产品字段内的“Shoe”暗指的客户列表。供应商列表随后被当作选择在字段 Customer 中使用。

sum( {$})>} Sales )
其返回当前选择项的销售额,但仅限于没有购买过‘Shoe’的客户。Element 函数 E( ) 可返回排除的客户列表,即通过选择产品字段内的“Shoe”排除的客户列表。

 

posted @ 2015-12-03 13:08  xcxp小胖  阅读(1311)  评论(0编辑  收藏  举报