今天介紹Excel中的一個非常特殊的函數,GETPIVOTDATA。
一般在基礎性的培訓課上,我都不會講這個函數,即使有人問起,我也會說不用關心它,對於普通人來說,用處不大,完全可以不學它。
不過,在有些特殊場合,這個公式可以起到很大的作用,比如在DASHBOARD中,或者數據報告裡。
看完本文的介紹,相信你會發現這個函數的用處的😉
本文內容:
認識GETPIVOTDATA
使用GETPIVOTDATA的8個例子和注意事項
為什麼要使用GETPIVOTDATA函數
GETPIVOTDATA的問題
關閉GETPIVOTDATA的自動生成
大部分使用Excel的朋友對這個函數都相當陌生。但是,我相信很多人都見過這個函數,大多數人第一次見到這個函數是如下的場景:
假設我們有這個一個透視表:
我們希望引用一月份的總銷售額然後求產品的平均值,由於1月份的銷售額合計在F5單元格,因此,我們希望的公式是:=F5/5(5個產品)。於是,你像輸入其他公式一樣,在G5單元格中輸入一個:=,然後滑鼠點擊F5單元格,出乎你的意料,你沒有得到:=F5,卻得到了一長串內容:
很多人可能會把這一長串內容「嚇著」,趕緊就按Esc鍵,取消輸入,甚至都沒有來得及看看這一長串內容寫的是什麼😉。
這一長串內容就是在公式引用透視表的單元格時自動生成的GETPIVOTDATA函數。
這個函數其實很簡單的。
先來看名字:
從名字上看,這個公式的作用就是從透視表中獲得數據。
它的使用也比較簡單。我們看下面的例子:
這裡這個公式=GETPIVOTDATA("數量",$A$3,"區域","西區","月",1)使用了6個參數,很簡單就可以看出是什麼意思:
這個公式的意思就是:
取得——A3單元格所在的透視表中,列欄位「區域」中項目為「西區」,行欄位「月份」中項目為「1」 的「數量」
實際上,就是通過這些參數唯一限定了透視表區域的一個單元格。
儘管簡單,這個公式在使用中還是有一些需要注意的地方,下面我們結合例子來詳細介紹一下。
例1 最簡單的GETPIVOTDATA公式
這個公式中不是除了前面兩個參數外,其餘的參數都不是必須的。因此,我們可以寫這個一個公式:
=GETPIVOTDATA("數量",$A$3)
這個公式的意思是獲得A3單元格所在的透視表中的數量。對照這個透視表,你能夠指出到底是哪一個值:
這裡沒有通過行欄位和列欄位指定範圍,那麼在這個透視表上用「數量」唯一能夠確定的就是右下角那個單元格F8,即1082279。
例2 只指定列欄位
理解了上一個例子的,下面這個公式就很容易理解了:
=GETPIVOTDATA("數量",$A$3,"區域","西區")
這個值只要取得透視表中區域為西區的數量值,由於沒有行欄位的限定,因此,只能是西區的合計值,就E8單元格的值。
同樣,可以只指定行欄位,而不要列欄位。
例3 多個行標籤(或列標籤的情況)
如果透視表上行標籤不止一個,那麼要唯一確定透視表的單元格就必須用多個行標籤來限定,參數就會更多。
例如這個公式:
=GETPIVOTDATA("數量",$A$3,"日期",2,"區域","東區","產品","芬達橙味200","月",1)
其中,取得值欄位是「數量」,列標籤是「區域」,項目是「東區」,但是行標籤是通過月份,日期,產品3個標籤來限定的。
從這個例子也可以看出,除了前兩個參數外,其他的參數順序無所謂,只要能唯一限定一個單元格就好了。
例4 這個公式本質上是個查找
如果你換一個角度看這個公式,實際上這個公式就是個多條件3D的查找公式。
3D指三個維度:
值欄位——第一個參數
行欄位——行欄位名稱和行欄位項目
列欄位-列欄位名稱和列欄位項目
這個公式根據這個3個維度唯一確定一個值。
還是上面的公式,如果我們把透視表變成表格格式,就看得更加清楚了:
實際上,這個公式是在這個表格中查找滿足行列條件的那個單元格的值。
例5 透視表布局會影響結果。
由於上面這個原因,不同的透視表布局會影響同一個公式的結果。例如:
現在這個公式的值是1082279。如果我們將篩選改成1月:
公式沒變,結果卻變了。這個例子再次說明這個公式的機制就是在透視表表格中查找,它並不負責根據源數據計算相應的結果。
例6 如果公式中指定的標籤在透視表上不存在怎麼辦?
假設,原來的公式是:
=GETPIVOTDATA("數量",$A$3,"日期",2,"區域","東區","產品","芬達橙味200","月",1)
現在,我們將透視表中產品從行標籤中去掉:
可以看到,現在公式返回了一個錯誤值,表示引用的區域不存在了!
例8 公式中可以引用單元格
這個很容易理解。例如,公式:
=GETPIVOTDATA("數量",$A$3,"日期",2,"區域","東區","產品","芬達橙味200","月",1)
可以寫成:
=GETPIVOTDATA("數量",$A$3,"日期",2,"區域","東區","產品","芬達橙味200","月",G1)
在G1中輸入不同月份,就可以取出對應月份的數量。
這樣我們就可以很靈活的控制我們需要的內容了。
大部分在了解了這個函數後,下一個必然的問題就是:既然都使用了透視表了,為什麼還需要使用這個函數?
根據我的經驗,有2個原因:
報告布局的要求
在我們做報告或者Dashboard時,對版式布局的要求比較嚴格。而透視表很多時候不方便進行布局,又可能多出了很多我們不需要展示的數據。但是我們又需要通過透視表來分析匯總數據。這時,我們就可以通過這個函數來取出我們想要的數據按照我們的布局要求放在最終的結果表上。這篇文章介紹了一個這麼使用的例子:【Excel模板】年底了,贈送九宮人才盤點模板及模板製作方法。
速度的要求
這些值通過函數可以根據源數據算出來,但是會造成計算速度過慢等問題,此時,就可以使用透視表把數據計算出來,然後通過GETPIVOTDATA獲得想要的數據,從而提高計算速度。
看到這裡,相信有很多朋友會發現這個函數有一個問題:
想使用GETPIVOTDATA取得相應的數值,必須保證有一個透視表存在,並且該透視表的布局必須保證要取得的單元格是存在的。
如果你有多個需求,很可能這些需求不能在一個透視表布局上得到滿足,就需要做多個透視表。這會給後續的維護帶來相當大的複雜性。
這是GETPIVOTDATA這個函數的機製造成的,沒有辦法避免。如果想規避這種情況,又想利用GETPIVVOTDATA這種方法,可以使用CUBE函數,我會在以後的文章中為大家詳細介紹。
很多人不知道在透視表中這個函數可以關閉「自動生成」這個函數的功能。選中透視表任意單元格,在「分析」選項卡中,點擊最左邊的選項,然後去掉「生成GetPivotData」的勾選:
這樣,你再採取本文一開始的方法,在公式中點擊透視表的數值單元格時,就不會生成GETPIVOTDATA函數,而是直接引用單元格了。
需要說明的是,這個操作並沒有「關閉」這個公式的使用,你仍然可以在單元格中直接輸入:=GETPIVOTDATA來使用這個函數。
如果你想系統學習Excel相關知識,可以加入E學會,永久免費學習20門Excel精彩課程。點擊「閱讀原文」了解詳情,也可加客服諮詢更多優惠閱讀往期技術文章:點擊底部菜單:開始學習==>學習指南分享 / 投稿 / 商務合作 微信號: excel-plus