集合分析

集合分析 ............................................................................................................... 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. 集合運算符號
在集合表達式中可以使用集合運算符號。所有的集合運算符號使集合作為運算對象,如上 文所描述的,返回一個結果集。

“+” 合并。此二元操作返回包含任意兩個集合運算對象的記錄集。
“-” 排除。此二元操作返回一個記錄集,屬于一個集合運算對象但不屬于另外一個集 合運算對象。同時,當使用一元操作時,它返回補集。
“*” 交集。此二元操作返回同時屬于兩個集合運算對象的記錄集。
“/” 或。此二元操作返回屬于兩個集合運算對象中任一個的記錄集,但不是屬于兩個 集合運算對象。

優(yōu)先級順序是:

  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’字符串的所有值。搜索是不區(qū)分大小寫的,也可以用于排除值。

空集合元素,顯式的例如<Product = {}>或者隱式的例如<Product = {"Perpetuum Mobile"}>(搜索無結果),都意味著沒有產品,也就是,他們將導致記錄集與產品沒有任何關聯(lián)。 注意采用常用選擇,這個集合不會有結果,除非有一個選擇條件作用于另外一個字段,例如 TransactionID。

更進一步說,一個字段的選擇條件可以用集合操作和幾個集合元素來定義。例如,設置<Year = {"20", 1997} - {2000}>將選擇所有以“20”開頭的年份,再加上“1997”,但排除 “2000”。
以上的符號定義了新的選擇,忽略字段的當前選擇。然而,當你想要將你的選擇基于字段的當 前選擇,并加上字段值,你可以用這個例子<Year = Year + {2007, 2008}>。一個等同的寫法是 <Year += {2007, 2008}>。也就是,賦值符號隱式的定義了一個合并。隱式的交集、排除、和或 能夠用“
=”, “–=”和“/=”來定義。

最后,當字段選擇是AND模式時,強制排除也會有可能發(fā)生。如果你要強制排除精確的 字段值,你需要在字段名前使用“~”。
集合的修改可以作用于一個集合標識符或它本身。它不能作用于集合表達式。當作用于一 個集合標識符時,修改必須緊跟在集合標識符后面,例如{$<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 )
返回所有區(qū)域為US的銷售額,忽略當前選擇。

sum( {$<Region = >} Sales )
返回當前選擇的銷售額,但選擇條件中的區(qū)域被去掉。

sum( {<Region = >} Sales )
返回和上面例子相同的結果。當集合修改被忽略時,$起作用。
注意
以上兩個例子的語法說明在區(qū)域字段里沒有選擇。也就是,其他選擇條件下所有 的區(qū)域都有可能。它不等同于語法<Region = {}>(或其他任何文本在等號的右邊,隱式 的導致一個空集合元素),它解釋為沒有區(qū)域。

sum( {$<Year = {2000}, Region = {US, SE, DE, UK, FR}>} Sales )
返回當前選擇的銷售額,同時在年和地區(qū)字段上有新的選擇條件。

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”最初包括在當 前選擇條件中。此例子顯示了有時使用括號定義優(yōu)先級的重要性。 1.3.3. 例子 – 使用搜索: sum( {<Year = {“2*”}>} Sales )
返回當前銷售額,但包括所有以“2”開頭的年份。也就是,大部分類似“2000” 年及以后的值,在年份字段中被選中。

sum( {$<Year = {“2”,”198”}>} Sales )
同上,但“1980”-“1989”也會包括在選擇條件中。

sum( {$<Year = {“>1978<2004”}>} Sales )
同上,但現在用數字搜索來指定任意的區(qū)間。

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 "

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容