The importance of Only()
若群組中只有一個可能值,則 Only() 會傳回值。此值將會是彙總結果。若沒有指定彙總函數,則 Qlik Sense 預設為 Only()。
若圖表維度和參數之間有一對一關係,則 Only() 函數只會傳回可能值。若有數個值,則會傳回 NULL。例如,如果多個產品有單價 12,則僅搜尋單價 = 12 的產品將傳回 NULL。
下列影像顯示一對一和一對多關係之間的差異:
Only() 函數是彙總函數。這使用許多記錄作為輸入並且僅傳回一個值,類似於 Sum() 或 Count()。Qlik Sense 幾乎會在其所有計算中使用彙總。圖表、排序運算式、文字方塊、進階搜尋和計算標籤中的運算式都是彙總,若沒有涉及彙總函數,就無法計算。
但是,若使用者輸入缺乏明確彙總函數的運算式,會怎麼樣?例如,若排序運算式設定為 Date?或者,若有個進階搜尋可用於購買啤酒和紅酒產品的客戶,其中使用運算式 =[Product Type]='Beer and Wine'?
這就是 Only() 函數影響計算的地方。若運算式中沒有明確的彙總函數,Qlik Sense 會隱含使用 Only() 函數。在上述案例中,Only(Date) 用於排序運算式,而 Only([Product Type])='Beer and Wine' 用來作為搜尋條件。
有時候,新的運算式會傳回使用者沒有預期的結果。若只有一個 Date 或 Product Type 的可能值,則以上兩個範例都可以運作,但若有多個值,則兩者都無法在各自的情況下運作。
使用 Only() 的不同運算式
我們將使用類似的運算式建立四個 KPI。藉此方式,我們可以比較在運算式中的不同位置具有裸欄位參考或是具有 Only() 會如何對您的選項結果產生重大影響。
在應用程式內部,您將在 Importance of Only()工作表找到含有 Invoice Date 作為維度的篩選窗格。
請執行下列動作:
- 建立 KPI。
- 按一下新增量值。按一下 符號。
運算式編輯器就會開啟。 - 輸入下列內容: Month([Invoice Date])
- 使用量值建立其他三個 KPIs:Month(Only([Invoice Date]))、Month(Max([Invoice Date])) 和 Only(Month([Invoice Date]))。
- 按一下套用。
若您有裸欄位參考,會在最低層級插入 Only() 函數。這表示,前兩個 KPI、Month([Invoice Date]) 和 Month(Only([Invoice Date])) 將會解譯為相同內容,並且永遠提供相同結果。
如您所見,四個 KPI 當中的三個傳回 NULL。第三個 KPI (即 Month(Max([Invoice Date]))) 已傳回值,即使沒有選取任何選項。
撰寫運算式時,務必問問自己想要使用哪個彙總,或者若有數個值,則要問問自己想要使用哪個值。若您想要使用 NULL 呈現數個值,可以讓運算式保留原來的樣子。對於數字,您可能會想要改用 Sum()、Avg()、Min() 或 Max()。對於字串,您可能會想要使用 Only() 或 MinString()。
請執行下列動作:
- 停止編輯工作表。
- 在篩選窗格中,選取一月的日期。
- 按一下 以確認選項。
若選取單一選項,所有 KPI 都會傳回正確答案。即使運算式包含裸欄位參考,例如 Month([Invoice Date]) 中的運算式,我們選取唯一選項的事實仍允許傳回正確的值。
請執行下列動作:
- 在篩選窗格中,選取一月的其他日期。
- 按一下 以確認選項。
前兩個 KPI 會傳回 NULL,而其他兩個 KPI 會傳回一月的適當值。特別的是,第四個 KPI 會傳回正確答案,因為我們選取的日期選項用於一月的日期。
請執行下列動作:
- 在篩選窗格中,選取一月以外月份的其他日期。
- 按一下 以確認選項。
使用不同月份的日期選取多個選項時,只有第三個 KPI 會傳回值。這會根據運算式 Month(Max([Invoice Date])),傳回所選選項中最大月份的值。由於 Only() 會自動插入含有裸欄位參考的運算式中,您無法永遠假定最低層級一定適用於運算式。Only() 的位置十分重要。
如需更多資訊,請參閱 Only - 圖表函數