集合分析 ............................................................................................................... 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
- 集合分析
集合分析用于聚合函数。聚合函数通常计算当前选择条件下的记录。但另外一些条件下的 记录集可以用集合表达式来获得。因此,一个集合分析概念上很像是一个选择。
一个集合表达式通常前后用波形括号{}来定义,例如{BM01}
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. 集合运算符号
在集合表达式中可以使用集合运算符号。所有的集合运算符号使集合作为运算对象,如上 文所描述的,返回一个结果集。
“+” 合并。此二元操作返回包含任意两个集合运算对象的记录集。
“-” 排除。此二元操作返回一个记录集,属于一个集合运算对象但不属于另外一个集 合运算对象。同时,当使用一元操作时,它返回补集。
“*” 交集。此二元操作返回同时属于两个集合运算对象的记录集。
“/” 或。此二元操作返回属于两个集合运算对象中任一个的记录集,但不是属于两个 集合运算对象。
优先级顺序是:
- 一元的负数(余数);
- “*”和“/”;
- “+”和“-”;
在表达式中遵循从左到右的顺序来计算。集合运算符号不能交换顺序时,用标准括号来定 义顺序是有必要的。例如, A+(B-C)与(A+B)-C是不同的,也不同于(A-C)+B。
1.2.1. 举例:
sum( {1-$} Sales )
返回不包括当前选择条件的所有销售额
sum( {$*BM01} Sales )
返回当前选择条件和书签BM01数据交集的销售额
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( {<Product = Product + {OurProduct1} – {OurProduct2} >} Sales )
返回当前销售额,同时将“OurProduct1”增加到产品字段选择列表中,将 “OurProduct2”从产品字段选择列表中移除。
sum( {$<Year = Year + ({“20*”,1997} – {2000}) >} Sales )
返回当前销售额,同时额外增加选择条件,年字段中值为“1997”和所有“20” 开头的年份,然而不包括“2000”.注意,如果“2000”包括在当前选择条件中, 它仍旧在集合修改后包含(注:即“ {2000}”不起作用)。
sum( {<Year = {“2*”}>} Sales )
返回当前销售额,但包括所有以“2”开头的年份。也就是,大部分类似“2000” 年及以后的值,在年份字段中被选中。
sum( {$<Year = {“2”,”198”}>} Sales )
同上,但“1980”-“1989”也会包括在选择条件中。
sum( {$<Year = {“>1978<2004”}>} Sales )
同上,但现在用数字搜索来指定任意的区间。
sum( {<Product += {OurProduct1, OurProduct2} >} Sales )
返回当前销售额,但使用隐式的合并,将产品“OurProduct1”和“OurProduct2” 加到选择列表中。
sum( {$<Year += {“20”,1997} – {2000} >} Sales )
返回当前销售额,但使用隐式合并,将增加一个年份的选择条件:“1997”年和所 有“20”开头的年份,除了“2000”。注意如果“2000”包含在当前选择条件中, 集合修改后它仍旧被包含。等同于<Year=Year + ({“20”,1997}–{2000})>。
sum( {-标记扩充:
sum( {(#vLastYear)}>} Sales )
返回与当前选择相关的上一年销售额。这里,在$标记扩展中使用了变量 “vLastYear”包含相关的年。
sum( {(#=Only(Year)-1)}>} Sales )
返回与当前选择相关的上一年销售额。这里,–1<Product = {“Internal”, “Domestic”}>} Sales )
返回当前销售额,排除交易中相关产品,这些产品名称中有字符串‘Internal’和 ‘Domestic’。
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 "