

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 新增計算欄位
<a name="adding-a-calculated-field-analysis"></a>

透過使用以下一項或多項建立計算欄位以轉換資料：
+ [運算子](arithmetic-and-comparison-operators.md)
+ [函數](functions.md)
+ 彙總函數 (只能將這些函數新增至分析)
+ 包含資料的欄位
+ 其他計算欄位

您可以在資料準備期間或從分析頁面，將計算欄位新增至資料集。當您在資料準備期間將計算欄位新增至資料集時，所有使用該資料集的分析都可以使用此計算欄位。當您將計算欄位新增至分析中的資料集時，只有在該分析中才可使用此計算欄位。

分析同時支援單一資料列操作和彙總操作。單一資料列操作是對於每個資料列提供 (可能) 不同結果的操作。彙總操作為整個資料列集提供一律相同的結果。例如，如果您使用無任何條件的簡單字串函數，這會變更每個資料列。如果您使用彙總函數，這會套用到群組中的所有資料列。如果您要求美國的總銷售額，相同的字數會套用到整個集。如果您要求特定狀態的資料，總銷售金額會變更，以反映新的分組。這仍然會對於整個集提供一個結果。

透過在分析中建立彙總計算欄位，即可深入檢視資料。系統會適當地針對每個層集重新計算該彙總欄位的值。這類彙總無法在資料集準備期間進行。

例如，假設您想要找出每個國家、區域和州的營利百分比。您可以將計算欄位新增到分析 `(sum(salesAmount - cost)) / sum(salesAmount)`。您的分析深入探索地理位置時，系統會對於每個國家、區域和州計算此欄位。

**Topics**
+ [新增計算欄位至分析](#using-the-calculated-field-editor-analysis)
+ [新增計算欄位至資料集](#using-the-calculated-field-editor)
+ [處理計算欄位中的小數值](#handling-decimal-fields)

## 新增計算欄位至分析
<a name="using-the-calculated-field-editor-analysis"></a>

當您新增資料集至分析時，資料集中的每個計算欄位都會新增至分析。您可以在分析層級新增其他計算欄位，以建立僅在該分析中可用的計算欄位。

**若要新增計算欄位至分析**

1. 開啟 [Quick 主控台](https://quicksight.aws.amazon.com/)。

1. 開啟要變更的分析。

1. 在**資料**窗格中，選擇左上角的**新增**，然後選擇 **\$1 計算欄位**。

   1. 在開啟的計算編輯器中，執行下列動作：

   1. 輸入計算欄位的名稱。

   1. 使用資料集、函數和運算子中的欄位輸入公式。

1. 完成時，選擇**儲存**。

如需如何在 Quick Sight 中使用可用函數建立公式的詳細資訊，請參閱 [Amazon Quick 的計算欄位函數和運算子參考函式和運算子](calculated-field-reference.md)。

## 新增計算欄位至資料集
<a name="using-the-calculated-field-editor"></a>

Amazon Quick Sight 作者可以在資料集建立的資料準備階段期間產生計算欄位。當您為資料集建立計算欄位時，該等欄位會變成資料集中的新資料欄。使用資料集的所有分析，都會繼承資料集的計算欄位。

如果計算欄位在資料列層級運作，且資料集存放在 中SPICE，Quick Sight 會運算並將結果具體化為 SPICE。如果計算欄位依賴彙總函數，Quick Sight 會保留公式，並在分析產生時執行計算。這類計算欄位稱為未具體化的計算欄位。

**若要新增或編輯資料集的計算欄位**

1. 開啟您要使用的資料集。如需詳細資訊，請參閱[編輯資料集](edit-a-data-set.md)。

1. 在資料準備頁面上，執行下列動作之一：
   + 若要建立新欄位，選擇左側的**新增計算欄位**。
   + 若要編輯現有計算欄位，從左側的**計算欄位**中選擇對應欄位，然後從上下文 (按一下滑鼠右鍵) 選單中選擇**編輯**。

1. 在計算編輯器的**新增標題**中輸入一個描述性的名稱，為新計算欄位命名。此名稱出現在資料集的欄位清單中，因此看起來應該與其他欄位類似。在此範例中，我們將欄位命名為 `Total Sales This Year`。

1. (選用) 新增註解，例如將文字括在斜杠和星號中來說明運算式的作用。

   ```
   /* Calculates sales per year for this year*/
   ```

1. 確定要使用的指標、函數和其他項目。在此範例中，我們需要確定以下內容：
   + 要使用的指標
   + 函數：`ifelse` 和 `datediff`

   我們想要建置一個陳述式，例如「如果銷售發生在今年，則顯示總銷售額，否則顯示 0。」

   若要新增 `ifelse` 函數，開啟**函數**清單。選擇**全部**以關閉所有函數的清單。現在您應該會看到函數群組：**彙總**、**有條件**、**日期**等。

   選擇**有條件**，然後按兩下 `ifelse` 將其新增至工作區。

   ```
   ifelse()
   ```

1. 將游標放置於工作區中的括弧內，然後新增三個空白行。

   ```
   ifelse(
                                               
                                               
                                               
   )
   ```

1. 將游標置於第一個空白行，找到 `dateDiff` 函數。它列在**日期**下的**函數**中。您也可以透過在**搜尋函數**中輸入 **date** 來尋找它。`dateDiff` 函數會返回名稱中包含 *`date`* 的所有函數。它不會傳回**日期**下列出的所有函數；例如，搜尋結果中缺少 `now` 函數。

   連按兩下 `dateDiff` 以將其新增至 `ifelse` 陳述式的第一個空白行。

   ```
   ifelse(
   dateDiff()                                            
                                               
                                               
   )
   ```

   新增 `dateDiff` 使用的參數。將游標放置於 `dateDiff` 括弧內以開始新增 `date1`、`date2` 和 `period`：

   1. 對於 `date1`：第一個參數是內含日期的欄位。在**欄位**下找到它，然後按兩下或輸入其名稱以將其新增至工作區。

   1. 對於 `date2`，新增逗號，然後為**函數**選擇 `truncDate()`。在其括弧內新增句點和日期，如下所示：**truncDate( "YYYY", now() )**

   1. 對於 `period`：在 `date2` 後新增逗號並輸入 **YYYY**。這是一年的期間。若要查看所有支援期間的清單，請在**函數**清單中尋找 `dateDiff`，然後選擇**進一步了解**開啟文件。如果您正在檢視文件，就像現在一樣，請參閱 [dateDiff](dateDiff-function.md)。

   如果您願意，可以新增一些空格以提高可讀性。運算式應如下所示。

   ```
   ifelse(
      dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" )                                       
                                               
                                               
   )
   ```

1. 指定傳回值。在我們的範例中，`ifelse` 中的第一個參數需要傳回 `TRUE` 或 `FALSE` 的值。因為我們想要目前的年份，並且正在將其與今年進行比較，所以指定 `dateDiff` 陳述式應傳回 `0`。對於銷售年份與目前年份之間沒有差異的資料列，`ifelse` 的 `if` 部分評估為 true。

   ```
      dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) = 0 
   ```

   若要建立去年 `TotalSales` 的欄位，可以將 `0` 變更為 `1`。

   實現這個目標的另外一種做法是使用 `addDateTime` 而不是 `truncDate`。然後，對於每個前一年，您可以變更 `addDateTime` 的第一個參數來表示每個年份。為此，您為去年使用 `-1`，為前年使用 `-2`，依此類推。如果使用 `addDateTime`，則每年的 `dateDiff` 函數都保留為 `= 0`。

   ```
      dateDiff( {Discharge Date}, addDateTime(-1, "YYYY", now() ) ,"YYYY" ) = 0 /* Last year */
   ```

1. 將游標移至第一個空白行 `dateDiff` 的正下方。新增逗號。

   對於 `ifelse` 陳述式的 `then` 部分，我們需要選擇包含銷售金額的量值 (指標) `TotalSales`。

   若要選擇欄位，請開啟**欄位**清單，然後按兩下某個欄位以將其新增至螢幕。也可以輸入名稱。在包含空格的名稱周圍新增大括弧 `{ }`。您的指標可能有不同的名稱。您可以透過欄位前面的數字符號 (**\$1**) 知道哪個欄位是指標。

   陳述式應如下所示。

   ```
   ifelse(
      dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) = 0
      ,{TotalSales}                            
                                              
   )
   ```

1. 新增 `else` 子句。子句對於 `ifelse` 函數而言並非必需，但我們想要新增。出於報告目的，您通常不希望有任何 Null 值，因為有時包含 null 值的資料列會被略過。

   我們將 ifelse 的其他部分設定為 `0`。結果是對於包含前幾年之銷售額的資料列，此欄位為 `0`。

   為此，在空白行依序新增一個逗號和 `0`。如已在開頭新增註解，則完成的 `ifelse` 運算式應如下所示。

   ```
   /* Calculates sales per year for this year*/
   ifelse(
      dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) = 0
      ,{TotalSales}                            
      ,0                                         
   )
   ```

1. 選擇右上角的**儲存**以儲存您的工作。

   如果運算式中有錯誤，編輯器底部會顯示錯誤訊息。檢查您的運算式是否有紅色波浪線，然後將游標懸停在該行上方以查看錯誤訊息為何。常見錯誤包括缺少標點符號、缺少參數、拼字錯誤和資料類型無效。

   若要避免進行任何變更，請選擇**取消**。

**若要新增參數值至計算欄位**

1. 您可以引用計算欄位中的參數。透過新增參數加入至運算式，您可以新增該參數的目前值。

1. 若要新增參數，請開啟**參數**清單，然後選取您想要納入其值的參數。

1. (選用) 若要手動新增參數至運算式，請鍵入參數名稱。然後用大括弧 `{}` 括住它，並新增前綴 `$`，例如 `${parameterName}`。

您可以變更資料集中任何欄位的資料類型，包括計算欄位的類型。您只能選擇與欄位中的資料相符的資料類型。

**若要變更計算欄位的資料類型**
+ 對於**計算欄位** (左側)，選擇要變更的欄位，然後從上下文 (按一下滑鼠右鍵) 選單中選擇**變更資料類型**。

與資料集中的其他欄位不同，計算欄位無法停用。可以刪除它們。

**若要刪除計算欄位**
+ 對於**計算欄位** (左側)，選擇要變更的欄位，然後從上下文 (按一下滑鼠右鍵) 選單中選擇**刪除**。

## 處理計算欄位中的小數值
<a name="handling-decimal-fields"></a>

當您的資料集使用「直接查詢」模式時，小數資料類型的計算由來源引擎 (資料集的來源) 的行為決定。在某些情況下，Quick Sight 會套用特殊處理來判斷輸出計算的資料類型。

當您的資料集使用 SPICE 查詢模式且計算欄位被具體化時，結果的資料類型取決於特定函數運算子和輸入的資料類型。下表顯示某些數值計算欄位的預期行為。

**一元運算子**

下表顯示根據您使用的運算子以及所輸入值的資料類型輸出的資料類型。例如，如果您在 `abs` 計算中輸入整數，則輸出值的資料類型為整數。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/quick/latest/userguide/adding-a-calculated-field-analysis.html)

**二元運算子**

下表顯示根據您輸入的兩個值的資料類型輸出的資料類型。例如，對於算術運算子，如果您提供兩種整數資料類型，則計算輸出的結果為整數。

對於基本運算子 (\$1、-、\$1)：


|  | **整數** | **小數-定點** | **小數-浮點** | 
| --- | --- | --- | --- | 
|  **整數**  |  Integer  |  小數-定點  |  小數-浮點  | 
|  **小數-定點**  |  小數-定點  |  小數-定點  |  小數-浮點  | 
|  **小數-浮點**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 

對於除法運算子 (/)：


|  | **整數** | **小數-定點** | **小數-浮點** | 
| --- | --- | --- | --- | 
|  **整數**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 
|  **小數-定點**  |  小數-浮點  |  小數-定點  |  小數-浮點  | 
|  **小數-浮點**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 

對於指數運算子和模數運算子 (^、%)：


|  | **整數** | **小數-定點** | **小數-浮點** | 
| --- | --- | --- | --- | 
|  **整數**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 
|  **小數-定點**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 
|  **小數-浮點**  |  小數-浮點  |  小數-浮點  |  小數-浮點  | 