跳到主要內容 Skip to complementary content

裸欄位參考

若彙總函數中的欄位沒有加括號,則會被視為裸欄位。

裸欄位參考是一個陣列,可能包含數個值。若如此,Qlik Sense 將會評估為 NULL,並且不知道您想要其中哪些值。

務必在運算式中使用彙總函數

若您發現運算式沒有正確評估,則其中很可能沒有彙總函數。

運算式中的欄位參考是值的陣列。例如︰

兩個表格,一個顯示 Max(Invoice Date) 是單一值,一個顯示 Invoice Date 是值的陣列。

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

您必須為彙總函數中的發票日期欄位加括號,以摺疊為單一值。

若您沒有在運算式中使用彙總函數,Qlik Sense 依預設將會使用 Only() 函數。若欄位參考傳回數個值,Qlik Sense 將會詮釋為 NULL

使用 If() 函數分割發票日期

If() 函數通常用於條件式彙總。這會根據使用函數內提供的條件是評估為 True 還是 False,來傳回值。

在應用程式內部,您將於 Naked field references 工作表找到標題為 Using If() on Invoice dates 的表格。

  1. 選取標題為 Using If() on Invoice dates 的可用表格。
    屬性面板會開啟。
  2. 按一下新增欄,然後選取量值
  3. 按一下 Expression 符號。
    運算式編輯器就會開啟。
  4. 輸入下列內容: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. 按一下套用

表格顯示透過參考日期分割的發票日期。

 Table showing invoice dates being split by a reference date.

此運算式測試 Invoice Date 是否早於參考日期 2/18/2013,若是,是否會傳回「Before」。若日期晚於或等於參考日期 2/18/2013,則會傳回「After」。參考日期以整數 41323 表示。

如需更多資訊,請參閱 if - 指令碼和圖表函數

避免裸欄位參考

乍看之下,此運算式看似正確:

If([Invoice Date]>= Date(41323) 'After', 'Before')

這應在參考日期後評估發票日期,傳回「After」或傳回「Before」。不過,Invoice Date 是裸欄位參考,這沒有彙總函數,而是具有數個值的陣列,不會評估為 NULL。在先前的範例中,表格中的每個 Date 值只有一個 Invoice Date,因此運算式可正確計算。

現在來看看類似的運算式如何根據不同的維度值來計算,以及如何解決裸欄位參考問題:

If() 函數中避免裸欄位參考

我們將會使用與之前類似的運算式:

If([Invoice Date]>= Date(41323), Sum(Sales))

這次函數會加總參考日期之後的銷售額。

在應用程式內部,您將於 Naked field references 工作表找到標題為 Sum(Amount) 的表格。

  1. 選取可用的 Sum(Amount) 表格。
    屬性面板會開啟。
  2. 按一下新增欄,然後選取量值
  3. 按一下 Expression 符號。
    運算式編輯器就會開啟。
  4. 輸入下列內容: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. 按一下套用

表格顯示年、每年銷售總和以及使用 If() 函數的運算式結果。

 Table showing year, sum of sales for each year, and the results of the expression

提示備註保留量值上的標籤,不予更動,以顯示每個運算式之間的差異。在具有貨幣值的欄中,將數字格式變更為金錢,並將格式模式變更為 $ #,##0;-$ #,##0

對於每一年,有參考日期後出現的發票日期陣列。由於運算式缺乏彙總函數,這會評估為 NULL。正確的運算式應在 If() 函數的第一個參數中使用彙總函數,例如 Min()Max()

If(Max([Invoice Date])>= Date(41323), Sum(Sales))

  1. 按一下新增欄,然後選取量值
  2. 按一下 Expression 符號。
    運算式編輯器就會開啟。
  3. 輸入下列內容: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. 按一下套用

表格顯示年、每年銷售總和以及使用 If() 函數的不同運算式結果。

Table showing year, sum of sales for each year, and the results of the different expressions

或者,可將 If() 函數放入 Sum() 函數當中:

Sum(If([Invoice Date]>= Date(41323), Sales) )

  1. 按一下新增欄,然後選取量值
  2. 按一下 Expression 符號。
    運算式編輯器就會開啟。
  3. 輸入下列內容: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. 按一下套用

表格顯示年、每年銷售總和以及使用 If() 函數的不同運算式結果。

Table showing year, sum of sales for each year, and the results of the different expressions

在倒數第二個運算式中,每個維度值已評估一次 If() 函數。在最後一個運算式中,原始資料中的每列會評估一次。函數評估方式的差異會造成結果不同,但都會傳回答案。第一個運算式簡單評估為 NULL。上圖顯示使用 2/18/2013 作為參考日期時,運算式之間的差異。