PowerBI財務報表分析系列之:
資料準備篇
資料分析第一步,需要有資料,然後才能開始後續的一系列分析過程,PowerBI財務報表分析也不例外,第一篇,先來介紹報表資料的獲取,以及將獲取的資料整理成適合分析的樣式。
在這個分析示例中,用的是公開的上市公司資料,所以資料獲取,主要的工作就是利用PowerBI來批次爬取網頁資料。
如果你的分析物件是本公司的財務報表,會更加簡便,可以跳過網頁抓取資料的過程,直接進行整理資料就好了,不過學會了利用PowerBI抓取網頁資料的技能,以後總能用的上。
下面進入正文。
這個PowerBI財務報表分析報告,用的資料是2010年至2019年,5個上市公司的資產負債表、利潤表和現金流量表資料。
資料來源於新浪財經,先選取一個公司,比如萬科A,點選財務報表>資產負債表>2019,出現在眼前的網頁是這樣的:
2019年四個季度的資產負債表就同時展現出來了,並且資料結構非常好,可以為後期的整理省去很多工作。
然後檢視這個網址結構:
https://
money。finance。sina。com。cn
/corp/go。php/vFD_BalanceSheet/stockid/000002/ctrl/2019/displaytype/4。phtml
猜測其中的BalanceSheet、000002、2019就是分別表示資產負債表、萬科的股票程式碼和年度,可以換個公司和年度來驗證,比如五糧液的2018年利潤表,網址為:
http://
money。finance。sina。com。cn
/corp/go。php/vFD_ProfitStatement/stockid/000858/ctrl/2018/displaytype/4。phtml
和猜測的完全一致,那麼就可以利用PowerBI,來批次來抓取。
抓取多公司、多年度、多個報表的整體思路:
1、先抓取一個公司一年的一個報表;
2、利用第1步的查詢建立自定義函式;
3、構建引數列表;
4,呼叫自定義函式,批次抓取資料。
下面進入具體操作步驟。
1,利用PowerBI抓取一個公司、一年的報表
以上面第一個網址:2019年萬科的資產負債表為例,點選獲取資料>從web,將網址輸入進去,在彈出的導航器中,會看到PowerBI識別出來很多表格,因為這一頁本來就是有很多組資料,分別點選檢視,會看到表17的結構最為規範,
選中這個表,然後載入資料,進入Power Query編輯器。
首先觀察這個表的資料,空值都顯示為“——”,首先將它替換為0,然後將第一行用作標題:
如果對PowerQuery的基礎操作還不熟悉,建議先看看這篇文章:
資料清洗中最常使用的十三招
這是一個二維結構表,為便於之後的分析,將其轉換為一維表:選中第一列,點選逆透視>逆透視其他列,就變成了一維表:
不瞭解一維表的可以參考:關於一維表,你想知道的都在這裡了
萬科2019年的資產負債表提取並整理完畢。
其實這一步到這裡就可以結束了。不過在這個模型中,為了簡化,我將現金流量表的間接法附加資料刪除,只保留了直接法的現金流量表專案,因此,多做了現金流量表的查詢。
所以提取現金流量表的時候,在上面資產負債表操作的基礎上,增加了刪除底部行的步驟,其他步驟都相同(如果你需要使用現金補充資料,可以不單獨處理,只需要獲取一個資產負債表就行)。
2,建立自定義函式
在PowerBI中,操作的每一個步驟都會自動記錄下來,資料來源更新後,重新整理就可以自動完成所有的操作步驟。
更進一步的,還可以將這個查詢函式化,進而應用於相似的其他查詢,這就用到了PowerQuery的自定義函式(如果你還不清楚什麼是自定義函式,可以先看看:認識Power Query的自定義函式)。
自定義函式並不是都需要自己從零開始一點點寫M程式碼,還有更加簡便的方法。
第1步完成以後,右鍵該查詢的名稱,點選“建立函式”。
輸入函式名,這裡我按報表的型別,定義該函式為balancesheet。
然後選中這個自定義函式,點選進入高階編輯器,將前面幾行程式碼調整為下圖所顯示的內容:
就是修改一下獲取資料網址,將網址中的:報表型別、公司程式碼、年度分別用:type、code、year表示,並將這三個變數作為自定義函式的三個引數。
然後這個自定義函式就建好了,
在這個視窗,任意輸入三個有效引數,就能提取某個上市公司某年度的一個報表。
不過我們建立自定義函式的目的是為了批次獲取資料,所以在這個視窗中不需要操作。
同樣的方式,為現金流量表也生成一個自定義函式,命名為cashflow。
3,構建引數列表
針對三個引數,我們需要構建這三個引數的笛卡爾積,來得到每個公司的2010年-2019年的三大報表資料。
為了便於後期的修改和維護,我們先建立三個單獨的引數表。
在PowerQuery編輯器中,直接點選輸入資料,將需要分析的公司名稱和股票程式碼錄進去:
就生成了一個公司名稱表,同樣的方式,生成年度表和報表型別表。
接下來要做的是,生成這三個表的笛卡爾積,也就是公司程式碼、年度、報表型別的任意組合。
在PowerQuery中,生成笛卡爾積很簡單,先為這三個表都新增一列,比如1,然後合併查詢。
先合併查詢報表型別和年度:
得到的結果如下:
這就是報表型別和年度的任何組合,然後繼續將這個表與公司名稱表合併查詢,就得到了公司程式碼、年度、報表型別的任意組合表。
4、呼叫自定義函式
在第3步生成的表的基礎上,新增自定義列,
這個M程式碼的意思是,如果報表型別是CashFlow(現金流量表),就呼叫自定義函式:cashflow,否者呼叫balancesheet,他們的引數相同(如果只有一個自定義函式,就不需要用IF做判斷,直接呼叫就行)。
然後就抓取到了這5家公司10年的三大報表資料:
並且,批次抓取的報表資料,已經是我們需要的一維表資料,因為第一步的操作,就含有二維轉一維的步驟,後面在呼叫自定義函式的時候,都自動做了相同的操作。
當然你也可以用這種方法,一次性抓取上百家公司的資料,但速度會非常慢,所以建議只抓取需要的公司、最近年份的資料就可以了。
至此,三大表的資料抓取完成,主要就是利用PowerQuery的介面操作,以及簡單的幾個程式碼修改,即使沒有任何基礎,照著上面的步驟,也可以快速完成。
在這個財務分析示例中,其中有一頁是公司概況,也是透過網頁抓取的公司資訊:
資料來源於下面三個網頁:
公司公告
https://
vip。stock。finance。sina。com。cn
/corp/go。php/vCB_AllBulletin/stockid/000002。phtml
公司簡介
http://
vip。stock。finance。sina。com。cn
/corp/go。php/vCI_CorpInfo/stockid/000002。phtml
歷史行情
http://
q。stock。sohu。com/cn/000
002/lshq。shtml
這些資料的抓取和上面財報資料抓取步驟完全一樣,不過更加簡單,因為只有一個引數:公司程式碼,大家可以自己動手練習。
過以上的介紹,你應該可以輕鬆從網頁中抓取財報資料,需要相關的其他資料時,你都可以從網上搜索資源,然後批次抓取。
正如開頭所說,如果你要做的是自己公司的內部財報分析,你可以忽略掉本文抓取資料的步驟,而直接匯入現成的財務報表就行了,不過為了後續分析的需要,建議你仍應該將報表資料整理成一維表的結構。
資料整理好並上載,就可以進行下一步的資料建模。
財務報表分析原始檔以及後期更詳細的講解和答疑,加入知識星球社群,成為PowerBI星球會員即可獲得。
更多推薦: