資料透視表

您可以使用 Google 試算表 API 在試算表中建立及更新樞紐分析表。本頁面的範例說明如何使用 Google 試算表 API 執行常見的樞紐分析表作業。

這些範例以 HTTP 要求的形式呈現,以便不受語言限制。如要瞭解如何使用 Google API 用戶端程式庫,以不同語言實作批次更新,請參閱「更新試算表」。

在這些範例中,預留位置 SPREADSHEET_IDSHEET_ID 會指出您要提供這些 ID 的位置。你可以在試算表網址中找到試算表 ID。您可以使用 spreadsheets.get 方法取得工作表 ID。範圍是使用 A1 標記法來指定。範例範圍為 Sheet1!A1:D5。

此外,預留位置 SOURCE_SHEET_ID 會指出含有來源資料的工作表。在以下範例中,這是「樞紐分析表來源資料」下方所列的表格。

資料透視表來源資料

在這些範例中,假設所使用的試算表在第一個工作表 (「工作表 1」) 中含有以下來源的「銷售」資料。第一列中的字串是個別欄的標籤。如需查看如何從試算表中的其他工作表讀取資料的範例,請參閱「A1 標記」。

A B C D E F G
1 項目類別 型號 費用 數量 區域 銷售專員 出貨日期
2 車輪 W-24 $20.50 4 西 貝絲 2016 年 3 月 1 日
3 D-01X $15.00 2 Amir 2016 年 3 月 15 日
4 引擎 ENG-0134 $100.00 1 Carmen 2016 年 3 月 20 日
5 頁框 FR-0B1 $34.00 8 Hannah 2016 年 3 月 12 日
6 面板 P-034 $6.00 4 Devyn 2016 年 4 月 2 日
7 面板 P-052 $11.50 7 Erik 2016 年 5 月 16 日
8 車輪 W-24 $20.50 11 Sheldon 2016 年 4 月 30 日
9 引擎 ENG-0161 $330.00 2 Jessie 2016 年 7 月 2 日
10 D-01Y NT$870 元 6 西 Armando 2016 年 3 月 13 日
11 頁框 FR-0B1 $34.00 9 Yuliana 2016 年 2 月 27 日
12 面板 P-102 $3.00 美元 15 西 Carmen 2016 年 4 月 18 日
13 面板 P-105 $8.25 美元 13 西 Jessie 2016 年 6 月 20 日
14 引擎 ENG-0211 $283.00 美元 1 阿米爾 2016 年 6 月 21 日
15 D-01X $15.00 2 西 Armando 2016 年 7 月 3 日
16 頁框 FR-0B1 $34.00 6 Carmen 7/15/2016
17 車輪 W-25 $20.00 8 Hannah 2016 年 5 月 2 日
18 車輪 W-11 $29.00 美元 13 Erik 2016 年 5 月 19 日
19 D-05 $17.70 美元 7 西 Beth 2016 年 6 月 28 日
20 頁框 FR-0B1 $34.00 8 Sheldon 2016 年 3 月 30 日

新增資料透視表

以下 spreadsheets.batchUpdate 程式碼範例說明如何使用 UpdateCellsRequest 從來源資料建立樞紐分析表,並將樞紐分析表固定在 SHEET_ID 指定工作表的 A50 儲存格上。

要求會使用下列屬性設定樞紐資料表:

  • 一個值群組 (Quantity),用於表示銷售次數。由於只有一個值群組,因此 2 個可能的 valueLayout 設定是等價的。
  • 兩個資料列群組 (商品類別型號)。第一個排序依據是「West」區域的總數量,以遞增值排序。因此,「Engine」(沒有 West 銷售) 會顯示在「Door」(有 15 筆 West 銷售) 上方。「型號」分組會依所有地區的總銷售量由高至低排序,因此「W-24」(15 筆銷售) 會顯示在「W-25」(8 筆銷售) 之上。方法是將 valueBucket 欄位設為 {}
  • 一個資料欄群組 (區域),用於按大部分銷售資料遞增排序。 再次提醒,valueBucket 已設為 {}。「北」的總銷售額最低,因此會出現在第一個「Region」(地區) 欄。

要求通訊協定如下所示。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
          "rows": [
              {
            "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING",
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "West"
                          }
                        ]
                      }
                    },
                    {
                      "sourceColumnOffset": 1,
                      "showTotals": true,
                      "sortOrder": "DESCENDING",
                      "valueBucket": {}
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true,
                      "valueBucket": {}
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    }
                  ],
                  "valueLayout": "HORIZONTAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

這項要求會建立如下所示的資料透視表:

新增資料透視表的方案結果

新增含有計算值的資料透視表

以下 spreadsheets.batchUpdate 程式碼範例說明如何使用 UpdateCellsRequest 建立樞紐分析表,並使用來自來源資料的計算值群組,將樞紐分析表固定在 SHEET_ID 指定工作表的 A50 儲存格上。

這項要求會設定資料透視表並加入下列屬性:

  • 兩個值群組 (數量總價)。第一個代表銷售次數。第二個是根據零件成本和銷售總數的乘積計算得出的值,使用以下公式:=Cost*SUM(Quantity)
  • 三個資料列群組 (「商品類別」、「型號」和「費用」)。
  • 一個欄群組 (區域)。
  • 資料列和資料欄群組會依據各群組中的名稱 (而非「數量」) 排序,將表格依字母順序排列。方法是省略 PivotGroup 中的 valueBucket 欄位。
  • 為了簡化表格外觀,要求會隱藏所有子項總計,除了主要資料列和欄群組。
  • 要求將 valueLayout 設為 VERTICAL,藉此提升資料表外觀。只有在有 2 個以上的值組搭配時,valueLayout 才重要。

請參閱下方要求通訊協定。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
        "rows": [
              {
            "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING"
                    },
                    {
                      "sourceColumnOffset": 1,
                      "showTotals": false,
                      "sortOrder": "ASCENDING",
                    },
                    {
                      "sourceColumnOffset": 2,
                      "showTotals": false,
                      "sortOrder": "ASCENDING",
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    },
                    {
                      "summarizeFunction": "CUSTOM",
                      "name": "Total Price",
                      "formula": "=Cost*SUM(Quantity)"
                    }
                  ],
                  "valueLayout": "VERTICAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

這項要求會建立如下所示的資料透視表:

新增資料透視表值群組食譜結果

刪除資料透視表

以下 spreadsheets.batchUpdate 程式碼範例說明如何使用 UpdateCellsRequest 刪除 SHEET_ID 指定工作表的 A50 儲存格所繫結的樞紐分析表 (如有)。

UpdateCellsRequest 可以透過在 fields 參數中加入「pivotTable」,同時省略錨定儲存格上的 pivotTable 欄位,移除樞紐分析表。

請參閱下方要求通訊協定。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
          "rows": [ 
            {
            "values": [
              {}
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

編輯資料透視表的欄和列

以下 spreadsheets.batchUpdate 程式碼範例說明如何使用 UpdateCellsRequest 編輯在「新增資料透視表」中建立的資料透視表。

您無法使用 fields 參數個別變更 CellData 資源中的 pivotTable 欄位子集。如要編輯,就必須提供整個 pivotTable 欄位。基本上,你必須使用新的資料透視表來編輯資料透視表。

這項要求會對原始資料透視表進行下列變更:

  • 從原始樞紐分析表 (型號編號) 中移除第二個資料列群組。
  • 新增資料欄群組 (Salesperson)。這些欄會依據 Panel 銷售量的總數,以遞減順序排序。「Carmen」(15 個「Panel」銷售量) 會顯示在「Jessie」(13 個「Panel」銷售量) 的左側。
  • 收合每個「Region」(區域) 的資料欄,但「West」(西方) 除外,但隱藏該地區的「Salesperson」(銷售專員) 群組。方法是在 Region 資料欄群組中,將 valueMetadata 中該資料欄的 collapsed 設為 true

要求通訊協定如下所示。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
        "rows": [
            {
          "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING",
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "West"
                          }
                        ]
                      }
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true,
                      "valueBucket": {},
                      "valueMetadata": [
                        {
                          "value": {
                            "stringValue": "North"
                          },
                          "collapsed": true
                        },
                        {
                          "value": {
                            "stringValue": "South"
                          },
                          "collapsed": true
                        },
                        {
                          "value": {
                            "stringValue": "East"
                          },
                          "collapsed": true
                        }
                      ]
                    },
                    {
                      "sourceColumnOffset": 5,
                      "sortOrder": "DESCENDING",
                      "showTotals": false,
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "Panel"
                          }
                        ]
                      },
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    }
                  ],
                  "valueLayout": "HORIZONTAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

這項要求會建立資料透視表,如下所示:

編輯資料透視表食譜結果

讀取資料透視表資料

以下 spreadsheets.get 程式碼範例說明如何從試算表取得樞紐分析表資料。fields 查詢參數會指定只傳回資料透視表資料 (而非儲存格值資料)。

請參閱下方要求通訊協定。

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(properties.sheetId,data.rowData.values.pivotTable)

回應包含 Spreadsheet 資源,其中包含帶有 SheetProperties 元素的 Sheet 物件。此外,系統也會提供 GridData 元素陣列,其中包含 PivotTable 的相關資訊。樞紐分析表資訊包含在試算表錨定在的儲存格 (也就是資料表的左上角) 的試算表 CellData 資源中。如果回應欄位設為預設值,系統會從回應中省略該欄位。

在本例中,第一張工作表 (SOURCE_SHEET_ID) 有原始資料表來源資料,第二個工作表 (SHEET_ID) 則具有資料透視表,以 B3 為主。空白的捲曲符號表示不含資料透視表資料的試算表或儲存格。為方便您參考,這項要求也會傳回工作表 ID。

{
  "sheets": [
    {
      "data": [{}],
      "properties": {
        "sheetId": SOURCE_SHEET_ID
      }
    },
    {
      "data": [
        {
          "rowData": [
            {},
            {},
            {
              "values": [
                {},
                {
                  "pivotTable": {
                    "columns": [
                      {
                        "showTotals": true,
                        "sortOrder": "ASCENDING",
                        "sourceColumnOffset": 4,
                        "valueBucket": {}
                      }
                    ],
                    "rows": [
                      {
                        "showTotals": true,
                        "sortOrder": "ASCENDING",
                        "valueBucket": {
                          "buckets": [
                            {
                              "stringValue": "West"
                            }
                          ]
                        }
                      },
                      {
                        "showTotals": true,
                        "sortOrder": "DESCENDING",
                        "valueBucket": {},
                        "sourceColumnOffset": 1
                      }
                    ],
                    "source": {
                      "sheetId": SOURCE_SHEET_ID,
                      "startColumnIndex": 0,
                      "endColumnIndex": 7,
                      "startRowIndex": 0,
                      "endRowIndex": 20
                    },
                    "values": [
                      {
                        "sourceColumnOffset": 3,
                        "summarizeFunction": "SUM"
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ],
      "properties": {
        "sheetId": SHEET_ID
      }
    }
  ],
}