跳到主要內容 跳至補充內容

The importance of Only()

若群組中只有一個可能值,則 Only() 會傳回值。此值將會是彙總結果。若沒有指定彙總函數,則 Qlik Sense 預設為 Only()

圖表維度和參數之間有一對一關係,則 Only() 函數只會傳回可能值。若有數個值,則會傳回 NULL。例如,如果多個產品有單價 12,則僅搜尋單價 = 12 的產品將傳回 NULL

下列影像顯示一對一和一對多關係之間的差異:

表格顯示 Manager NumberManager 之間的一對一關係

兩欄表格

表格顯示 Sales Rep NameManager 的一對多關係

兩欄表格

Only() 函數是彙總函數。這使用許多記錄作為輸入並且僅傳回一個值,類似於 Sum()Count()Qlik Sense 幾乎會在其所有計算中使用彙總。圖表、排序運算式、文字方塊、進階搜尋和計算標籤中的運算式都是彙總,若沒有涉及彙總函數,就無法計算。

但是,若使用者輸入缺乏明確彙總函數的運算式,會怎麼樣?例如,若排序運算式設定為 Date?或者,若有個進階搜尋可用於購買啤酒和紅酒產品的客戶,其中使用運算式 =[Product Type]='Beer and Wine'

這就是 Only() 函數影響計算的地方。若運算式中沒有明確的彙總函數,Qlik Sense 會隱含使用 Only() 函數。在上述案例中,Only(Date) 用於排序運算式,而 Only([Product Type])='Beer and Wine' 用來作為搜尋條件。

有時候,新的運算式會傳回使用者沒有預期的結果。若只有一個 DateProduct Type 的可能值,則以上兩個範例都可以運作,但若有多個值,則兩者都無法在各自的情況下運作。

使用 Only() 的不同運算式

我們將使用類似的運算式建立四個 KPI。藉此方式,我們可以比較在運算式中的不同位置具有裸欄位參考或是具有 Only() 會如何對您的選項結果產生重大影響。

應用程式內部,您將在 Importance of Only()工作表找到含有 Invoice Date 作為維度的篩選窗格。

  1. 建立 KPI
  2. 按一下新增量值。按一下 運算式 符號。
    運算式編輯器就會開啟。
  3. 輸入下列內容: Month([Invoice Date])
  4. 使用量值建立其他三個 KPIsMonth(Only([Invoice Date]))Month(Max([Invoice Date]))Only(Month([Invoice Date]))
  5. 按一下套用

四個 KPIs 和篩選窗格顯示三個不同但類似的運算式。

KPI 結果

提示備註在每個 KPI 中,數字格式已設定為量值運算式

若您有裸欄位參考,會在最低層級插入 Only() 函數。這表示,前兩個 KPIMonth([Invoice Date])Month(Only([Invoice Date])) 將會解譯為相同內容,並且永遠提供相同結果。

如您所見,四個 KPI 當中的三個傳回 NULL。第三個 KPI (即 Month(Max([Invoice Date]))) 已傳回值,即使沒有選取任何選項。

撰寫運算式時,務必問問自己想要使用哪個彙總,或者若有數個值,則要問問自己想要使用哪個值。若您想要使用 NULL 呈現數個值,可以讓運算式保留原來的樣子。對於數字,您可能會想要改用 Sum()Avg()Min()Max()。對於字串,您可能會想要使用 Only()MinString()

  1. 停止編輯工作表。
  2. 在篩選窗格中,選取一月的日期。
  3. 按一下 核取記號 以確認選項。

若選取單一選項,KPI 結果會變更。

KPI 結果

若選取單一選項,所有 KPI 都會傳回正確答案。即使運算式包含裸欄位參考,例如 Month([Invoice Date]) 中的運算式,我們選取唯一選項的事實仍允許傳回正確的值。

  1. 在篩選窗格中,選取一月的其他日期。
  2. 按一下 核取記號 以確認選項。

若對一月的兩個日期都選取兩個選項,KPI 結果會變更。

KPI 結果

前兩個 KPI 會傳回 NULL,而其他兩個 KPI 會傳回一月的適當值。特別的是,第四個 KPI 會傳回正確答案,因為我們選取的日期選項用於一月的日期。

  1. 在篩選窗格中,選取一月以外月份的其他日期。
  2. 按一下 核取記號 以確認選項。

對不同月份的日期選取多個選項時,KPI 結果會變更。

KPI 結果

使用不同月份的日期選取多個選項時,只有第三個 KPI 會傳回值。這會根據運算式 Month(Max([Invoice Date])),傳回所選選項中最大月份的值。由於 Only() 會自動插入含有裸欄位參考的運算式中,您無法永遠假定最低層級一定適用於運算式。Only() 的位置十分重要。

如需更多資訊,請參閱 Only - 圖表函數

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!