iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 24
0
自我挑戰組

Access VBA的眉眉角角系列 第 24

Access VBA 的眉眉角角Day24: 樞紐分析表與交叉資料表查詢

  • 分享至 

  • xImage
  •  

在Excel的「樞紐分析表」相信不少人用來分析資料,Access上也有此功能,用法與Excel幾乎相同,但SQL的查詢語法中,Access也有一個類似的查詢方式,叫做交叉資料表查詢,可以達到預期效果,但沒有樞紐分析表這麼有彈性,使用上要搭配VBA來變換SQL語句,達到預期顯示效果。

我們先以樞紐分析表進行介紹,使用以下的SQL語句建立一個查詢,名為「Q_DAY24_1」:

SELECT 客戶.公司名稱, 產品資料.產品, 訂貨明細.數量, Format([訂單日期],"YYYY-MM") AS 訂單年月
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼;

「設計檢視」狀態下如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221hupvRWKOy4.png

「資料工作表」檢視如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221jG6aZFhHre.png

我們切換到「樞紐分析表檢視」
http://ithelp.ithome.com.tw/upload/images/20161213/20007221kauhQrTgbt.png

將欄位拉到以下位置:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221YSsWIpKhlX.png

使用VBA開啟樞紐分析表方法如下:

Sub 開啟樞紐分析表範例()

    DoCmd.OpenQuery "Q_DAY24_1", acViewPivotTable, acReadOnly

End Sub

但很常發現,使用VBA開啟查詢為樞紐分析表檢視時,Access會卡住,然後就無法復原,不確定是什麼樣的原因。

後面來介紹使用交叉資料表查詢,Access有內建精靈來逐步導入,但我們也可以手動方式來建立,以下我們先建立一個查詢,名為「Q_DAY24_2」:

SELECT 客戶.公司名稱, 產品資料.產品, Sum(訂貨明細.數量) AS 總計
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼
GROUP BY 客戶.公司名稱, 產品資料.產品

「設計檢視」狀態下如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221wGMrGiHbTD.png

「資料工作表」檢視如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221kU7YaiPD02.png

隨後,我們將原本的SQL語句的前後加上要進行分析的項目:

****TRANSFORM Sum(訂貨明細.數量) AS 數量之總計
SELECT 客戶.公司名稱, 產品資料.產品, Sum(訂貨明細.數量) AS 總計
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼
GROUP BY 客戶.公司名稱, 產品資料.產品
****PIVOT Format([訂單日期],"YYYY-MM")

TRANSFORM放上匯總數量,PIVOT(樞紐)則放要訂單的年月資料,以年月資料區分匯總數量。

「設計檢視」狀態下如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221UTJo1t6uMW.png

「資料工作表」檢視如下:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221PaSyzJg8Zg.png

隨後出來,就會是類似樞紐分析表的內容,這語句可以用於表單中的清單方塊中,您可以依照自己的需求,由VBA程式合成所需的語句,於清單方塊中使用。

以上的分享,希望對各位有幫助。


上一篇
Access VBA 的眉眉角角Day23: 呼叫Google翻譯
下一篇
Access VBA 的眉眉角角Day25: 檢測伺服器與網站服務是否活著
系列文
Access VBA的眉眉角角30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言