圖表運算式中輪替狀態機的範例
這些範例旨在展示 QlikView 開發人員及/或超級 QlikView 進階使用者使用輪替狀態機的最佳做法。這些範例可以在下列檔案中找到:‘Alternate States Functionality.qvw’
同步處理不同狀態的選項
下列運算式可用於單一圖表中:
- count({$} DISTINCT [Invoice Number])
- count({State1} DISTINCT [Invoice Number])
- count({State2} DISTINCT [Invoice Number])
這個方法有一個問題;QlikView 開發人員必須對於所有三個狀態複製選項 (列表框和多選方塊),使用者才能對於不同的狀態選取正確的選項。在許多情況下,QlikView 開發人員會想要讓所有狀態都有一組「共同」選項。這能夠讓使用者設定不同圖表的內容,然後使用特定的選項顯示狀態之間的差異。可以對於狀態使用「集合分析」,使狀態之間的某些選項保持一致。
- count({State1<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])
- count({State2<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])
QlikView 開發人員將會讓 State1 和 State2 的年度和月份選項與預設狀態中的年度和月份選項保持同步。QlikView 開發人員可以視需要將元素新增到 set 修飾詞,以便讓狀態之間的更多欄位保持一致。
集合運算子
對於狀態可以使用運算子 (+、*、-、/)。下列運算式均有效,而且將計算預設狀態 或 State1 的相異發票數。
範例:
- count({$ + State1} DISTINCT [Invoice Number])
計算在 <default> 狀態及 State1 的聯集中的相異發票數。
- count({1 - State1} DISTINCT [Invoice Number])
計算不在 State1 中的相異發票數。
- count({State1 * State2} DISTINCT [Invoice Number])
計算同時在 <default> 狀態及 State1 中的相異發票數。
隱含欄位值定義
set 運算子也可用於元素函數 P() 及 E()。這些函數僅適用於 set 運算式。
範例:
- count({$<[Invoice Number] = p({State1} [Invoice Number])>} DISTINCT [Invoice Number])
此運算式會依據 State1 中可能的發票數,計算 <default> 狀態中的相異發票數。
它相當於下列運算式,但不完全相同:
- count({$<[Invoice Number] = State1::[Invoice Number]>} DISTINCT [Invoice Number])
這些運算式的差別在於,在第一個運算式中,State1 的發票數可能值會傳遞到預設狀態。而在第二個運算式中,State1 的所選值會傳遞到預設狀態。如果使用者未選取 State1 中的任何發票數,就不會將任何發票數值傳遞到預設狀態。
在 set 修飾詞中最適合使用 set 運算子。下列運算式會找出 State1 與 State2 中可能發票數的交集,並且將這些值傳遞到預設狀態中的發票數。
範例:
- count({$<[Invoice Number] = p({State1} [Invoice Number]) * p({State2} [Invoice Number])>} DISTINCT [Invoice Number])
此運算式會找出 <default> 狀態與 State1 中發票數的交集:
- count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1} [Invoice Number])>} DISTINCT [Invoice Number])
此運算式可能看起來有些混淆,因為它在元素函數和 set 識別碼中使用狀態 (在本例中為 <default>)。請記住,元素函數 p($) 會傳回預設狀態中可能的值。set/state 識別碼 {$} 由元素函數的結果修改。目前在預設狀態中的任何發票選項將由元素函數交集的值所覆寫。
應該注意的是,以上的運算式並不完全正確,因為它無法同步處理預設狀態 與 State1 之間的共同選項。以下是能夠同步處理的運算式:
範例:
- count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1<Year = $::Year, Month = $::Month>} [Invoice Number])>} DISTINCT [Invoice Number])
如上所述,QlikView Developer 可以將欄位新增到修飾詞,使不同狀態之間的選項保持一致。