跳到主要內容
The importance of Only()

在此頁面

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 符號。
    運算式編輯器就會開啟。
  3. 輸入下列內容: Month([Invoice Date])
  4. 使用量值建立其他三個 KPIsMonth(Only([Invoice Date]))Month(Max([Invoice Date]))Only(Month([Invoice Date]))
  5. 按一下套用

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

提示備註在每個 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. 按一下 m 以確認選項。

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

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

請執行下列動作:

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

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

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

請執行下列動作:

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

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

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

如需詳細資訊,請參閱 Only