集合分析 ............................................................................................................... 3
1.1. 集合標(biāo)識(shí)符 ............................................................................................... 3
1.1.1. 舉例 ............................................................................................... 3
1.2. 集合運(yùn)算符號(hào) ........................................................................................... 4
1.2.1. 舉例: .............................................................................................. 4
1.3. 集合修改 ................................................................................................... 5
1.3.1. 基本例子: ...................................................................................... 6
1.3.2. 例子 – 使用集合運(yùn)算符號(hào): ........................................................ 6
1.3.3. 例子 – 使用搜索: ........................................................................ 7
1.3.4. 例子–隱式集合運(yùn)算使用賦值: .................................................. 7
1.3.5. 例子 – 使用$-標(biāo)記擴(kuò)充: ............................................................ 7
1.3.6. 例子 – 高級(jí): ................................................................................ 8
1.3.7. 例子 – 通過(guò)其它字段: ................................................................ 8
- 集合分析
集合分析用于聚合函數(shù)弓摘。聚合函數(shù)通常計(jì)算當(dāng)前選擇條件下的記錄漏麦。但另外一些條件下的 記錄集可以用集合表達(dá)式來(lái)獲得。因此债查,一個(gè)集合分析概念上很像是一個(gè)選擇录别。
一個(gè)集合表達(dá)式通常前后用波形括號(hào){}來(lái)定義速挑,例如{BM01}
1.1. 集合標(biāo)識(shí)符
用一個(gè)常數(shù)來(lái)表示一個(gè)記錄集。比如“1”表示在應(yīng)用中所有數(shù)據(jù)的集合低零。
“}與不寫(xiě)} 更加有趣掏婶,它定義了當(dāng)前選擇的反選,也就是潭陪,不包括當(dāng)前選擇的所有記錄雄妥。
返回/前進(jìn)按鈕的選擇也可以用集合標(biāo)示符來(lái)表示,使用以1”老厌,表示 前一步的選擇,也就是黎炉,其等同于按下“返回”按鈕枝秤。同樣的,“0” 表示當(dāng)前選擇洪添。
最后,書(shū)簽可以用在集合標(biāo)識(shí)符中雀费。注意只有服務(wù)器書(shū)簽和文檔書(shū)簽才能被引用干奢。書(shū)簽的 ID和名稱都可以使用,例如盏袄,BM01 或 MyBookmark忿峻。只用到書(shū)簽中選中的數(shù)據(jù)。變量不包 含其中辕羽。無(wú)法使用書(shū)簽中的input fields來(lái)作為分析的集合逛尚。
1.1.1. 舉例
sum( {$} Sales )
返回當(dāng)前選擇的銷(xiāo)售額,也就是刁愿,等同于sum(Sales)绰寞。
sum( {$1} Sales )
返回上一步選擇的銷(xiāo)售額
sum( {$_2} Sales )
返回向前第二步選擇的銷(xiāo)售額。也就是铣口,兩步向前操作滤钱。相對(duì)應(yīng)的是,你做兩步 向后操作脑题。
sum( {1} Sales )
返回此應(yīng)用中所有的銷(xiāo)售額件缸,忽略選擇條件,但還是與緯度相關(guān)叔遂。如果在圖表中 使用他炊,例如產(chǎn)品作為緯度争剿,每個(gè)產(chǎn)品將獲得不同的值。
sum( {1} Total Sales )
返回此應(yīng)用中所有的銷(xiāo)售額佑稠,忽略選擇條件和緯度秒梅,也就是等同于sum(All Sales)。
sum( {BM01} Sales )
返回ID為BM01書(shū)簽所選擇的銷(xiāo)售額舌胶。
sum( {MyBookMark} Sales )
返回名稱為MyBookMark的書(shū)簽所選擇的銷(xiāo)售額捆蜀。
sum({Server\BM01} Sales)
返回服務(wù)器書(shū)簽BM01所選擇的銷(xiāo)售額。
sum({Document\MyBookmark}Sales)
返回服務(wù)器書(shū)簽MyBookMark所選擇的銷(xiāo)售額幔嫂。
1.2. 集合運(yùn)算符號(hào)
在集合表達(dá)式中可以使用集合運(yùn)算符號(hào)辆它。所有的集合運(yùn)算符號(hào)使集合作為運(yùn)算對(duì)象,如上 文所描述的履恩,返回一個(gè)結(jié)果集锰茉。
“+” 合并。此二元操作返回包含任意兩個(gè)集合運(yùn)算對(duì)象的記錄集切心。
“-” 排除飒筑。此二元操作返回一個(gè)記錄集,屬于一個(gè)集合運(yùn)算對(duì)象但不屬于另外一個(gè)集 合運(yùn)算對(duì)象绽昏。同時(shí)协屡,當(dāng)使用一元操作時(shí),它返回補(bǔ)集全谤。
“*” 交集肤晓。此二元操作返回同時(shí)屬于兩個(gè)集合運(yùn)算對(duì)象的記錄集。
“/” 或认然。此二元操作返回屬于兩個(gè)集合運(yùn)算對(duì)象中任一個(gè)的記錄集补憾,但不是屬于兩個(gè) 集合運(yùn)算對(duì)象。
優(yōu)先級(jí)順序是:
- 一元的負(fù)數(shù)(余數(shù))卷员;
- “*”和“/”盈匾;
- “+”和“-”;
在表達(dá)式中遵循從左到右的順序來(lái)計(jì)算毕骡。集合運(yùn)算符號(hào)不能交換順序時(shí)削饵,用標(biāo)準(zhǔn)括號(hào)來(lái)定 義順序是有必要的。例如挺峡, A+(B-C)與(A+B)-C是不同的葵孤,也不同于(A-C)+B。
1.2.1. 舉例:
sum( {1-$} Sales )
返回不包括當(dāng)前選擇條件的所有銷(xiāo)售額
sum( {$*BM01} Sales )
返回當(dāng)前選擇條件和書(shū)簽BM01數(shù)據(jù)交集的銷(xiāo)售額
sum( {-(BM01}數(shù)量價(jià)格)
1.3. 集合修改
集合中的內(nèi)容會(huì)根據(jù)一個(gè)增加的選擇條件或是一個(gè)另外的選擇條件改變宰啦。這樣的改變可以 設(shè)置在集合表達(dá)式中苏遥。集合中的條件由一個(gè)或多個(gè)字段名組成,每個(gè)都跟隨著字段上的一個(gè)選 擇條件赡模,所有條件的都附上< >田炭。例如,<Year={2007,+2008},Region={US}>漓柑。字段名和字段值 可以用引號(hào)和常量來(lái)表示教硫,例如,<[Sales Region]={‘West coast’, ‘South America’}>辆布。
有幾個(gè)方法去定義選擇條件:一個(gè)簡(jiǎn)單的例子是瞬矩,一個(gè)選擇條件是基于另外一個(gè)字段被選 中的值,例如锋玲,<OrderDate = DeliveryDate>景用。這時(shí)將獲得字段DeliveryDate的選中值,并賦值 給字段OrderDate 作為選擇條件惭蹂。如果有很多不重復(fù)的值伞插,大于200個(gè),這個(gè)操作會(huì)導(dǎo)致CPU 瞬間劇烈運(yùn)算盾碗,應(yīng)該避免媚污。
最常見(jiàn)的例子是用<>括號(hào)來(lái)表示一個(gè)字段及它的值,其中多個(gè)值用逗號(hào)來(lái)分隔置尔。例如<Year = {2007, 2008}>杠步。在這里氢伟,<>括號(hào)定義一個(gè)集合中的元素榜轿,這些元素或者是字段值,或者是字 段值的搜索朵锣。一個(gè)搜索通常用雙引號(hào)定義谬盐。例如,<Ingredient = {"Garlic"}>表示選擇包含 ‘garlic’字符串的所有值诚些。搜索是不區(qū)分大小寫(xiě)的飞傀,也可以用于排除值。
空集合元素诬烹,顯式的例如<Product = {}>或者隱式的例如<Product = {"Perpetuum Mobile"}>(搜索無(wú)結(jié)果)砸烦,都意味著沒(méi)有產(chǎn)品,也就是绞吁,他們將導(dǎo)致記錄集與產(chǎn)品沒(méi)有任何關(guān)聯(lián)幢痘。 注意采用常用選擇,這個(gè)集合不會(huì)有結(jié)果家破,除非有一個(gè)選擇條件作用于另外一個(gè)字段颜说,例如 TransactionID购岗。
更進(jìn)一步說(shuō),一個(gè)字段的選擇條件可以用集合操作和幾個(gè)集合元素來(lái)定義门粪。例如喊积,設(shè)置<Year = {"20", 1997} - {2000}>將選擇所有以“20”開(kāi)頭的年份,再加上“1997”玄妈,但排除 “2000”乾吻。
以上的符號(hào)定義了新的選擇,忽略字段的當(dāng)前選擇拟蜻。然而溶弟,當(dāng)你想要將你的選擇基于字段的當(dāng) 前選擇,并加上字段值瞭郑,你可以用這個(gè)例子<Year = Year + {2007, 2008}>辜御。一個(gè)等同的寫(xiě)法是 <Year += {2007, 2008}>。也就是屈张,賦值符號(hào)隱式的定義了一個(gè)合并擒权。隱式的交集、排除阁谆、和或 能夠用“=”, “–=”和“/=”來(lái)定義碳抄。
最后,當(dāng)字段選擇是AND模式時(shí)场绿,強(qiáng)制排除也會(huì)有可能發(fā)生剖效。如果你要強(qiáng)制排除精確的 字段值,你需要在字段名前使用“~”焰盗。
集合的修改可以作用于一個(gè)集合標(biāo)識(shí)符或它本身璧尸。它不能作用于集合表達(dá)式。當(dāng)作用于一 個(gè)集合標(biāo)識(shí)符時(shí)熬拒,修改必須緊跟在集合標(biāo)識(shí)符后面爷光,例如{$<Year = {2007, 2008}>}。如果作用 于它本身澎粟,即是當(dāng)前選擇的修改蛀序。
因此,完整的語(yǔ)法(不包括可選的標(biāo)準(zhǔn)括號(hào))是:
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 )
返回所有區(qū)域?yàn)閁S的銷(xiāo)售額活烙,忽略當(dāng)前選擇徐裸。
sum( {$<Region = >} Sales )
返回當(dāng)前選擇的銷(xiāo)售額,但選擇條件中的區(qū)域被去掉啸盏。
sum( {<Region = >} Sales )
返回和上面例子相同的結(jié)果重贺。當(dāng)集合修改被忽略時(shí),$起作用。
注意
以上兩個(gè)例子的語(yǔ)法說(shuō)明在區(qū)域字段里沒(méi)有選擇檬姥。也就是曾我,其他選擇條件下所有 的區(qū)域都有可能。它不等同于語(yǔ)法<Region = {}>(或其他任何文本在等號(hào)的右邊健民,隱式 的導(dǎo)致一個(gè)空集合元素)抒巢,它解釋為沒(méi)有區(qū)域。
sum( {$<Year = {2000}, Region = {US, SE, DE, UK, FR}>} Sales )
返回當(dāng)前選擇的銷(xiāo)售額秉犹,同時(shí)在年和地區(qū)字段上有新的選擇條件蛉谜。
sum( {<Product = Product + {OurProduct1} – {OurProduct2} >} Sales )
返回當(dāng)前銷(xiāo)售額型诚,同時(shí)將“OurProduct1”增加到產(chǎn)品字段選擇列表中,將 “OurProduct2”從產(chǎn)品字段選擇列表中移除鸳劳。
sum( {$<Year = Year + ({“20*”,1997} – {2000}) >} Sales )
返回當(dāng)前銷(xiāo)售額狰贯,同時(shí)額外增加選擇條件,年字段中值為“1997”和所有“20” 開(kāi)頭的年份赏廓,然而不包括“2000”.注意涵紊,如果“2000”包括在當(dāng)前選擇條件中, 它仍舊在集合修改后包含(注:即“ {2000}”不起作用)幔摸。
sum( {<Year = {“2*”}>} Sales )
返回當(dāng)前銷(xiāo)售額,但包括所有以“2”開(kāi)頭的年份患雇。也就是跃脊,大部分類似“2000” 年及以后的值,在年份字段中被選中庆亡。
sum( {$<Year = {“2”,”198”}>} Sales )
同上匾乓,但“1980”-“1989”也會(huì)包括在選擇條件中捞稿。
sum( {$<Year = {“>1978<2004”}>} Sales )
同上又谋,但現(xiàn)在用數(shù)字搜索來(lái)指定任意的區(qū)間。
sum( {<Product += {OurProduct1, OurProduct2} >} Sales )
返回當(dāng)前銷(xiāo)售額衰齐,但使用隱式的合并任斋,將產(chǎn)品“OurProduct1”和“OurProduct2” 加到選擇列表中。
sum( {$<Year += {“20”,1997} – {2000} >} Sales )
返回當(dāng)前銷(xiāo)售額耻涛,但使用隱式合并废酷,將增加一個(gè)年份的選擇條件:“1997”年和所 有“20”開(kāi)頭的年份瘟檩,除了“2000”。注意如果“2000”包含在當(dāng)前選擇條件中澈蟆, 集合修改后它仍舊被包含墨辛。等同于<Year=Year + ({“20”,1997}–{2000})>。
sum( {-標(biāo)記擴(kuò)充:
sum( {(#vLastYear)}>} Sales )
返回與當(dāng)前選擇相關(guān)的上一年銷(xiāo)售額。這里寥闪,在$標(biāo)記擴(kuò)展中使用了變量 “vLastYear”包含相關(guān)的年太惠。
sum( {(#=Only(Year)-1)}>} Sales )
返回與當(dāng)前選擇相關(guān)的上一年銷(xiāo)售額。這里疲憋,–1<Product = {“Internal”, “Domestic”}>} Sales )
返回當(dāng)前銷(xiāo)售額,排除交易中相關(guān)產(chǎn)品缚柳,這些產(chǎn)品名稱中有字符串‘Internal’和 ‘Domestic’嗽元。
sum( {<Customer = P({1<Product={‘Shoe’}>} Customer)>} Sales )
返回當(dāng)前選擇下桐猬,和Product字段中‘Shoe’相關(guān)的Customer的銷(xiāo)售額。其中P() 返回的是相關(guān)的Customer列表刽肠。其中用隱式的表示了選擇了與‘Shoe’相關(guān)的產(chǎn)品溃肪。
sum( {$<Customer = P({1<Product={‘Shoe’}>})>} Sales )
與上面的例子相同,如果忽略元素中的字段音五,函數(shù)返回我們指定的條件下的相關(guān) 值惫撰。
sum( {$<Customer = P({1<Product={‘Shoe’}>} Supplier)>} Sales )
返回當(dāng)前選擇下,Customer為所有選擇了Product是‘Shoe’的Supplier的銷(xiāo)售額躺涝。 這里函數(shù)P()返回的是相關(guān)的Supplier的列表厨钻。其中用隱式的表示了選擇了與‘Shoe’ 相關(guān)的產(chǎn)品。然后Customer相當(dāng)于是選擇了這些Supplier的值。
sum( {$<Customer = E({1<Product={‘Shoe’}>})>} Sales )
返回當(dāng)前選擇下夯膀,Customer為Product沒(méi)有選擇過(guò)Shoe的銷(xiāo)售額诗充。函數(shù)E()返 回與所列條件互斥的Customer列表。其中用隱式的表示了選擇了與‘Shoe’相關(guān)的產(chǎn) 品诱建。
相關(guān)語(yǔ)法:
完整的語(yǔ)法(不包括可選的標(biāo)準(zhǔn)括號(hào))是:
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 "