集合分析

集合分析 ............................................................................................................... 3
1.1. 集合标识符 ............................................................................................... 3
1.1.1. 举例 ............................................................................................... 3
1.2. 集合运算符号 ........................................................................................... 4
1.2.1. 举例: .............................................................................................. 4
1.3. 集合修改 ................................................................................................... 5
1.3.1. 基本例子: ...................................................................................... 6
1.3.2. 例子 – 使用集合运算符号: ........................................................ 6
1.3.3. 例子 – 使用搜索: ........................................................................ 7
1.3.4. 例子–隐式集合运算使用赋值: .................................................. 7
1.3.5. 例子 – 使用$-标记扩充: ............................................................ 7
1.3.6. 例子 – 高级: ................................................................................ 8
1.3.7. 例子 – 通过其它字段: ................................................................ 8

  1. 集合分析
    集合分析用于聚合函数。聚合函数通常计算当前选择条件下的记录。但另外一些条件下的 记录集可以用集合表达式来获得。因此,一个集合分析概念上很像是一个选择。
    一个集合表达式通常前后用波形括号{}来定义,例如{BM01}
    1.1. 集合标识符
    用一个常数来表示一个记录集。比如“1”表示在应用中所有数据的集合。
    ”符号表示当前选择的记录集。集合表达式{}与不写时{}集合表达式效果相同。{1-} 更加有趣,它定义了当前选择的反选,也就是,不包括当前选择的所有记录。
    返回/前进按钮的选择也可以用集合标示符来表示,使用以开头的这些符号,“1”,表示 前一步的选择,也就是,其等同于按下“返回”按钮。同样的,“_1”表示向前一步,也就是 其等同于按下“前进”按钮。任何无符号的整型能够用来表示返回和前进的符号。比如“0” 表示当前选择。
    最后,书签可以用在集合标识符中。注意只有服务器书签和文档书签才能被引用。书签的 ID和名称都可以使用,例如,BM01 或 MyBookmark。只用到书签中选中的数据。变量不包 含其中。无法使用书签中的input fields来作为分析的集合。
    1.1.1. 举例
    sum( {$} Sales )
    返回当前选择的销售额,也就是,等同于sum(Sales)。

sum( {$1} Sales )
返回上一步选择的销售额

sum( {$_2} Sales )
返回向前第二步选择的销售额。也就是,两步向前操作。相对应的是,你做两步 向后操作。

sum( {1} Sales )
返回此应用中所有的销售额,忽略选择条件,但还是与纬度相关。如果在图表中 使用,例如产品作为纬度,每个产品将获得不同的值。

sum( {1} Total Sales )
返回此应用中所有的销售额,忽略选择条件和纬度,也就是等同于sum(All Sales)。

sum( {BM01} Sales )
返回ID为BM01书签所选择的销售额。
sum( {MyBookMark} Sales )
返回名称为MyBookMark的书签所选择的销售额。

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

sum({Document\MyBookmark}Sales)
返回服务器书签MyBookMark所选择的销售额。
1.2. 集合运算符号
在集合表达式中可以使用集合运算符号。所有的集合运算符号使集合作为运算对象,如上 文所描述的,返回一个结果集。

“+” 合并。此二元操作返回包含任意两个集合运算对象的记录集。
“-” 排除。此二元操作返回一个记录集,属于一个集合运算对象但不属于另外一个集 合运算对象。同时,当使用一元操作时,它返回补集。
“*” 交集。此二元操作返回同时属于两个集合运算对象的记录集。
“/” 或。此二元操作返回属于两个集合运算对象中任一个的记录集,但不是属于两个 集合运算对象。

优先级顺序是:

  1. 一元的负数(余数);
  2. “*”和“/”;
  3. “+”和“-”;

在表达式中遵循从左到右的顺序来计算。集合运算符号不能交换顺序时,用标准括号来定 义顺序是有必要的。例如, A+(B-C)与(A+B)-C是不同的,也不同于(A-C)+B。
1.2.1. 举例:
sum( {1-$} Sales )
返回不包括当前选择条件的所有销售额

sum( {$*BM01} Sales )
返回当前选择条件和书签BM01数据交集的销售额

sum( {-(+BM01)} Sales ) 返回不包括当前选择条件和书签BM01 的销售额 注意 在基本的聚合表达式中,应该避免使用多个QlikView表格中的字段来进行集合运 算。例如,如果“数量”和“价格”在两张不同的表中,需要避免写这样的表达式: sum({BM01}数量价格)
1.3. 集合修改
集合中的内容会根据一个增加的选择条件或是一个另外的选择条件改变。这样的改变可以 设置在集合表达式中。集合中的条件由一个或多个字段名组成,每个都跟随着字段上的一个选 择条件,所有条件的都附上< >。例如,<Year={2007,+2008},Region={US}>。字段名和字段值 可以用引号和常量来表示,例如,<[Sales Region]={‘West coast’, ‘South America’}>。

有几个方法去定义选择条件:一个简单的例子是,一个选择条件是基于另外一个字段被选 中的值,例如,<OrderDate = DeliveryDate>。这时将获得字段DeliveryDate的选中值,并赋值 给字段OrderDate 作为选择条件。如果有很多不重复的值,大于200个,这个操作会导致CPU 瞬间剧烈运算,应该避免。

最常见的例子是用<>括号来表示一个字段及它的值,其中多个值用逗号来分隔。例如<Year = {2007, 2008}>。在这里,<>括号定义一个集合中的元素,这些元素或者是字段值,或者是字 段值的搜索。一个搜索通常用双引号定义。例如,<Ingredient = {"Garlic"}>表示选择包含 ‘garlic’字符串的所有值。搜索是不区分大小写的,也可以用于排除值。

空集合元素,显式的例如<Product = {}>或者隐式的例如<Product = {"Perpetuum Mobile"}>(搜索无结果),都意味着没有产品,也就是,他们将导致记录集与产品没有任何关联。 注意采用常用选择,这个集合不会有结果,除非有一个选择条件作用于另外一个字段,例如 TransactionID。

更进一步说,一个字段的选择条件可以用集合操作和几个集合元素来定义。例如,设置<Year = {"20", 1997} - {2000}>将选择所有以“20”开头的年份,再加上“1997”,但排除 “2000”。
以上的符号定义了新的选择,忽略字段的当前选择。然而,当你想要将你的选择基于字段的当 前选择,并加上字段值,你可以用这个例子<Year = Year + {2007, 2008}>。一个等同的写法是 <Year += {2007, 2008}>。也就是,赋值符号隐式的定义了一个合并。隐式的交集、排除、和或 能够用“
=”, “–=”和“/=”来定义。

最后,当字段选择是AND模式时,强制排除也会有可能发生。如果你要强制排除精确的 字段值,你需要在字段名前使用“~”。
集合的修改可以作用于一个集合标识符或它本身。它不能作用于集合表达式。当作用于一 个集合标识符时,修改必须紧跟在集合标识符后面,例如{$<Year = {2007, 2008}>}。如果作用 于它本身,即是当前选择的修改。
因此,完整的语法(不包括可选的标准括号)是:
set_modifier ::= < field_selection {, field_selection } >
field_selection ::= fieldname [ = | += | –= | *= | /= ] element_set
element_set ::= fieldname | { element { , element } } | element_set set_operator
element_set
element ::= fieldvalue | " search_mask "
1.3.1. 基本例子:
sum( {1<Region= {US} >} Sales )
返回所有区域为US的销售额,忽略当前选择。

sum( {$<Region = >} Sales )
返回当前选择的销售额,但选择条件中的区域被去掉。

sum( {<Region = >} Sales )
返回和上面例子相同的结果。当集合修改被忽略时,$起作用。
注意
以上两个例子的语法说明在区域字段里没有选择。也就是,其他选择条件下所有 的区域都有可能。它不等同于语法<Region = {}>(或其他任何文本在等号的右边,隐式 的导致一个空集合元素),它解释为没有区域。

sum( {$<Year = {2000}, Region = {US, SE, DE, UK, FR}>} Sales )
返回当前选择的销售额,同时在年和地区字段上有新的选择条件。

sum( {<~Ingredient = {“*garlic*”}>} Sales ) 返回当前销售额,同时在字段Ingredients中强制排除含有‘garlic’字符串的值。 1.3.2. 例子 – 使用集合运算符号: sum( {<Product = Product + {OurProduct1} – {OurProduct2} >} Sales )
返回当前销售额,同时将“OurProduct1”增加到产品字段选择列表中,将 “OurProduct2”从产品字段选择列表中移除。

sum( {$<Year = Year + ({“20*”,1997} – {2000}) >} Sales )
返回当前销售额,同时额外增加选择条件,年字段中值为“1997”和所有“20” 开头的年份,然而不包括“2000”.注意,如果“2000”包括在当前选择条件中, 它仍旧在集合修改后包含(注:即“ {2000}”不起作用)。

sum( {<Year = (Year + {“20*”,1997}) – {2000} >} Sales ) 返回上面例子相同的值,但这里的“2000”被排除,即使“2000”最初包括在当 前选择条件中。此例子显示了有时使用括号定义优先级的重要性。 1.3.3. 例子 – 使用搜索: sum( {<Year = {“2*”}>} Sales )
返回当前销售额,但包括所有以“2”开头的年份。也就是,大部分类似“2000” 年及以后的值,在年份字段中被选中。

sum( {$<Year = {“2”,”198”}>} Sales )
同上,但“1980”-“1989”也会包括在选择条件中。

sum( {$<Year = {“>1978<2004”}>} Sales )
同上,但现在用数字搜索来指定任意的区间。

sum( {<Year = {“*”} – {2000}, Product = {“*bearing*”} >} Sales ) 返回当前销售额,同时有新的年份选择条件:所有年不包含“2000”,产品包含字 符串“bearing”。 1.3.4. 例子–隐式集合运算使用赋值: sum( {<Product += {OurProduct1, OurProduct2} >} Sales )
返回当前销售额,但使用隐式的合并,将产品“OurProduct1”和“OurProduct2” 加到选择列表中。

sum( {$<Year += {“20”,1997} – {2000} >} Sales )
返回当前销售额,但使用隐式合并,将增加一个年份的选择条件:“1997”年和所 有“20”开头的年份,除了“2000”。注意如果“2000”包含在当前选择条件中, 集合修改后它仍旧被包含。等同于<Year=Year + ({“20
”,1997}–{2000})>。

sum( {<Product *= {OurProduct1} >} Sales ) 返回当前销售额,但只包含当前选择产品和产品为“OurProduct1”的交集。 1.3.5. 例子 – 使用-标记扩充:
sum( {<Year = {(#vLastYear)}>} Sales )
返回与当前选择相关的上一年销售额。这里,在$标记扩展中使用了变量 “vLastYear”包含相关的年。

sum( {<Year = {(#=Only(Year)-1)}>} Sales )
返回与当前选择相关的上一年销售额。这里,标记扩展用于计算上一年。 1.3.6. 例子 – 高级: sum( {–1<Product = {“Internal”, “Domestic”}>} Sales )
返回当前销售额,排除交易中相关产品,这些产品名称中有字符串‘Internal’和 ‘Domestic’。

sum( {<Customer = {“=Sum({1<Year = {2007}>} Sales ) > 1000000”}>} Sales ) 返回当前销售额,但有一个新的选择条件在客户字段上:只有2007年所有销售额 大于1,000,000的客户才被选中。 1.3.7. 例子 – 通过其它字段: 在上面的例子中,所有的选择条件都是通过直接设置一个值或者定义符合条件的 值来实现的。这里还可以通过另外一种方式来设置,用嵌套的集合定义。 在这种情况下,我们用到函数P()和E(),来分别表示可能的值和排除的值。对应的 括号中可以定义一个表达式或者一个字段,比如P({1} Customer)。这个函数只能用在 集合分析中。 sum( {<Customer = P({1<Product={‘Shoe’}>} Customer)>} Sales )
返回当前选择下,和Product字段中‘Shoe’相关的Customer的销售额。其中P() 返回的是相关的Customer列表。其中用隐式的表示了选择了与‘Shoe’相关的产品。

sum( {$<Customer = P({1<Product={‘Shoe’}>})>} Sales )
与上面的例子相同,如果忽略元素中的字段,函数返回我们指定的条件下的相关 值。

sum( {$<Customer = P({1<Product={‘Shoe’}>} Supplier)>} Sales )
返回当前选择下,Customer为所有选择了Product是‘Shoe’的Supplier的销售额。 这里函数P()返回的是相关的Supplier的列表。其中用隐式的表示了选择了与‘Shoe’ 相关的产品。然后Customer相当于是选择了这些Supplier的值。

sum( {$<Customer = E({1<Product={‘Shoe’}>})>} Sales )
返回当前选择下,Customer为Product没有选择过Shoe的销售额。函数E()返 回与所列条件互斥的Customer列表。其中用隐式的表示了选择了与‘Shoe’相关的产 品。

相关语法:
完整的语法(不包括可选的标准括号)是:
set_expression ::= { set_entity { set_operator set_entity } }
set_entity ::= set_identifier [ set_modifier ]
set_identifier ::= 1 | |N | $_N | bookmark_id | bookmark_name
set_operator ::= + | - | * | /
set_modifier ::= < field_selection {, field_selection } >
field_selection ::= field_name [ = | += | –= | *= | /= ]
element_set_expression
element_set_expression ::= element_set { set_operator element_set}
element_set ::= [ field_name ] | { element_list } | element_function
element_list ::= element { , element }
element_function ::= ( P | E ) ( [ set_expression ] [ field_name ] )
element ::= field_value | " search_mask "

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容