PowerBI財務報表分析系列之:

資料準備篇

資料分析第一步,需要有資料,然後才能開始後續的一系列分析過程,PowerBI財務報表分析也不例外,第一篇,先來介紹報表資料的獲取,以及將獲取的資料整理成適合分析的樣式。

在這個分析示例中,用的是公開的上市公司資料,所以資料獲取,主要的工作就是利用PowerBI來批次爬取網頁資料。

如果你的分析物件是本公司的財務報表,會更加簡便,可以跳過網頁抓取資料的過程,直接進行整理資料就好了,不過學會了利用PowerBI抓取網頁資料的技能,以後總能用的上。

下面進入正文。

這個PowerBI財務報表分析報告,用的資料是2010年至2019年,5個上市公司的資產負債表、利潤表和現金流量表資料。

資料來源於新浪財經,先選取一個公司,比如萬科A,點選財務報表>資產負債表>2019,出現在眼前的網頁是這樣的:

PowerBI財務報表分析:資料準備篇

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的結構最為規範,

PowerBI財務報表分析:資料準備篇

選中這個表,然後載入資料,進入Power Query編輯器。

首先觀察這個表的資料,空值都顯示為“——”,首先將它替換為0,然後將第一行用作標題:

PowerBI財務報表分析:資料準備篇

如果對PowerQuery的基礎操作還不熟悉,建議先看看這篇文章:

資料清洗中最常使用的十三招

這是一個二維結構表,為便於之後的分析,將其轉換為一維表:選中第一列,點選逆透視>逆透視其他列,就變成了一維表:

PowerBI財務報表分析:資料準備篇

不瞭解一維表的可以參考:關於一維表,你想知道的都在這裡了

萬科2019年的資產負債表提取並整理完畢。

其實這一步到這裡就可以結束了。不過在這個模型中,為了簡化,我將現金流量表的間接法附加資料刪除,只保留了直接法的現金流量表專案,因此,多做了現金流量表的查詢。

所以提取現金流量表的時候,在上面資產負債表操作的基礎上,增加了刪除底部行的步驟,其他步驟都相同(如果你需要使用現金補充資料,可以不單獨處理,只需要獲取一個資產負債表就行)。

2,建立自定義函式

在PowerBI中,操作的每一個步驟都會自動記錄下來,資料來源更新後,重新整理就可以自動完成所有的操作步驟。

更進一步的,還可以將這個查詢函式化,進而應用於相似的其他查詢,這就用到了PowerQuery的自定義函式(如果你還不清楚什麼是自定義函式,可以先看看:認識Power Query的自定義函式)。

自定義函式並不是都需要自己從零開始一點點寫M程式碼,還有更加簡便的方法。

第1步完成以後,右鍵該查詢的名稱,點選“建立函式”。

PowerBI財務報表分析:資料準備篇

輸入函式名,這裡我按報表的型別,定義該函式為balancesheet。

然後選中這個自定義函式,點選進入高階編輯器,將前面幾行程式碼調整為下圖所顯示的內容:

PowerBI財務報表分析:資料準備篇

就是修改一下獲取資料網址,將網址中的:報表型別、公司程式碼、年度分別用:type、code、year表示,並將這三個變數作為自定義函式的三個引數。

然後這個自定義函式就建好了,

PowerBI財務報表分析:資料準備篇

在這個視窗,任意輸入三個有效引數,就能提取某個上市公司某年度的一個報表。

不過我們建立自定義函式的目的是為了批次獲取資料,所以在這個視窗中不需要操作。

同樣的方式,為現金流量表也生成一個自定義函式,命名為cashflow。

3,構建引數列表

針對三個引數,我們需要構建這三個引數的笛卡爾積,來得到每個公司的2010年-2019年的三大報表資料。

為了便於後期的修改和維護,我們先建立三個單獨的引數表。

在PowerQuery編輯器中,直接點選輸入資料,將需要分析的公司名稱和股票程式碼錄進去:

PowerBI財務報表分析:資料準備篇

就生成了一個公司名稱表,同樣的方式,生成年度表和報表型別表。

接下來要做的是,生成這三個表的笛卡爾積,也就是公司程式碼、年度、報表型別的任意組合。

在PowerQuery中,生成笛卡爾積很簡單,先為這三個表都新增一列,比如1,然後合併查詢。

先合併查詢報表型別和年度:

PowerBI財務報表分析:資料準備篇

得到的結果如下:

PowerBI財務報表分析:資料準備篇

這就是報表型別和年度的任何組合,然後繼續將這個表與公司名稱表合併查詢,就得到了公司程式碼、年度、報表型別的任意組合表。

PowerBI財務報表分析:資料準備篇

4、呼叫自定義函式

在第3步生成的表的基礎上,新增自定義列,

PowerBI財務報表分析:資料準備篇

這個M程式碼的意思是,如果報表型別是CashFlow(現金流量表),就呼叫自定義函式:cashflow,否者呼叫balancesheet,他們的引數相同(如果只有一個自定義函式,就不需要用IF做判斷,直接呼叫就行)。

然後就抓取到了這5家公司10年的三大報表資料:

PowerBI財務報表分析:資料準備篇

並且,批次抓取的報表資料,已經是我們需要的一維表資料,因為第一步的操作,就含有二維轉一維的步驟,後面在呼叫自定義函式的時候,都自動做了相同的操作。

當然你也可以用這種方法,一次性抓取上百家公司的資料,但速度會非常慢,所以建議只抓取需要的公司、最近年份的資料就可以了。

至此,三大表的資料抓取完成,主要就是利用PowerQuery的介面操作,以及簡單的幾個程式碼修改,即使沒有任何基礎,照著上面的步驟,也可以快速完成。

在這個財務分析示例中,其中有一頁是公司概況,也是透過網頁抓取的公司資訊:

PowerBI財務報表分析:資料準備篇

資料來源於下面三個網頁:

公司公告

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星球會員即可獲得。

更多推薦: