用PowerBI分析上市公司财务数据(二)


前面在“

用PBI分析上市公司财务数据(一)

”中主要介绍了数据的获取、清洗,但要在PBI中实现动态的交互式分析,搭建模型是至关重要的一步。所谓模型可以理解为表以及表与表之间的关系,模型建的好,后续维护管理就比较容易,度量值的编写也就会相对容易。


那么如何才能建立合理模型呢?


笔者认为要具备以下条件:一是理解业务数据,知道主要分析的指标及潜在的报表分析需求;二是对DAX表达计算逻辑、特性有一定的了解。


题外话:


EXCEL中最难的函数可能就是查找引用函数了,如vlookup,index,match,lookup等,特别这些函数的数组用法,如果涉及到三维引用,大部分人都会弄晕,可能一个公式半天都弄不明白,也许好不容易弄明白了,过段时间又忘记了。不过这些在PBI中将不会存在,PBI将通过模型的建立,表与表之间的关联不再与数据呈现的物理位置有关,只需要理解“上下文”这个概念。


言归正传,下面来讲下如何建立模型:


第一步:分析数据特点

从数据的结构来讲,上市公司历年的财务报表,数据关系还是比较简单的,但是,数据也有其特点,如果没有财务基础知识的话,可能在写度量值时会犯一些错误。


首先要清楚:资产负债表是一类,利润表和现金流量表属另一类!


资产负债表是时点数据,它实际上是反映公司自成立以来每个时点资产负债情况,如果在后面度量值写成=SUM(资产负债表项目),那这个度量值在一个时间段内将毫无意义,因为把各个时点的数据直接相加,没有实际意义。


利润表和现金流量表则是时期数据,是反映一个时间段内收入、利润、现金流量变化的数据,但是由于利润表和现金流量表是本年累计数,即报表日期中2019年3月31日是指1-3月累计数,2019年6月30日是指1-6月累计数,由于这个原因,直接写度量值=SUM(利润)可能也没有意义,但SUM(利润)在一季度、二季度、三季度、四季度单独的筛选下又有意义,比如筛选一季度数据,则SUM(利润)代表所有年份一季度利润的合计。 第二步:确定分析维度

首先,时间公司名称这两个维度是必须,也很容易发现。但是后面报表科目应该怎么处理呢?其实我们能够发现,后面的报表科目其实也是一个维度,按照“

用PBI分析上市公司财务数据(一)

”处理完成后的数据,其实是一个二维表.


如果后续导出到EXCEL使用,或是直接打印出来阅读,或是用来做某几个指标的数理统计分析,这类二维表是合适的,但如果需要在PBI中分析,呈现更细致的微观分析报告,那么需要对数据进行降维处理,也就是要将后面的科目列进行逆透视操作。具体操作如下:


在PQ编辑器中对查询生成的资产负债表选择除公司代码、报告日期之外的其他列后右击,选择逆透视列,完成后更改下列名,如下:



利润表和现金流量表也按这样操作,最后三张财务报表列数完全相同,都是四列,分别为公司代码、报告日期、科目、值为了后续能够最大限度实现度量值的复用,维护简单,我们可以接下来将这三张表合并:选择这三张表


然后在功能区中选择追加查询=》将查询追加为新查询


最后,将生成的本表改名为财务报表。


虽然分析维度可以在模型建立后反复修改或添加,但由于分析维度对模型建立影响较大,因此,模型建立初最好要确定主要的分析维度


第三步:确定分析模型所需的表,
并设定表与表之间的关系


根据上面第二步分析得知,我们至少要有三个维度表,即时间、公司、科目维度表,有了这三个维度表后,我们就可以在后面分析中根据这些维度对数据进行切片计算。


1、建立时间表/日期表

由于待分析的财务报表数据中,日期字段仅一个即报表日期,因此建立日期表我们无需考虑过多因素,直接用DAX函数 calendarauto()建立,该函数直接扫描现有模型中的日期,自动建立涵盖现有日期字段的日期表。


具体操作如下:点击建模=》新表 ,输入 :日期表 = CALENDARAUTO()



这时模型中自动生成了Date 字段 ,然后依次点击新建列 分别建立以下字段:
年 = YEAR([Date]) 季度 = ROUNDUP(MONTH([Date])/3,0) 季度名称 = "Q"&[季度] 年季名称 = [年]&[季度名称]
在自动生成的日期建立这些字段主要是便于后期筛选和计算。



2、 建立公司维度表

公司维度表,即待分析的公司基本信息,在“用PBI分析上市公司财务数据(一)”中其实就已经在上交所网上得到了相关的数据,如下:



我们把它单独保存一张表,以便形成后续在公司维度上进行。


3、 建立科目维度表

通过前面的分析,我们还需要一张表科目信息表用来关联财务报表数据,由于科目维度信息表比较固定,更新次数少,我们可以先在EXCEL中手工维护好后导入PBI中。我们将科目维度表整理成以下样式,其中科目对照列是用来与财务报表建立关联的列



这里需要注意:由于科目对照列是主键,需要值唯一,由于现金流量表中的补充资料用到了部分利润表及资产负债表项目,导致值重复,为了实现值唯一,还需要对现金流量表的项目特殊处理,如下:
在PQ中选择现金流量表科目列=》在功能区选择转换=》格式=》添加后缀



这个后缀可以随便加,主要是为了和利润表、资产负债表区分,保证唯一,不过为了美观,我建议加了一个人眼看不出来的字符,但计算机又视为不同,经测试下面这个字符符合要求,字符代码为127



我们把这个字符复制后粘贴到下面输入框中,确定后即更新后完成整理。



同样,我们也在科目维度表中有关现金流量表科目的后面增加这个字符。
考虑到原来的科目中每个都有万元,直接显示显示出来不好看,因此,我们增加一列用来在报表可视化中显示出来的名称即项目名称列,为了让显示出来的项目显示出层级,更加好看,可以在项目名称的前后增加这个字签,模拟缩进效果,(该字符在查询时可见,在可视化时不可见)如下:



另外,考虑到科目显示排序的问题,我们由PQ自动生成一列索引列同时回到建模界面,将项目名称设置按列排序=》索引



最后,我们将日期表、公司信息表、科目维度表,财务报表 这四张表建立如下关系。




第四步:编写度量值
先编写一个基础度量值: 值合计 = SUM('财务报表'[值])


1、资产负债表项目
资产负债表项目我们一般是分析期初和期末金额及结构的变化,因此我们需要建立以下度量:
(1)期末金额
期末 =VAR EndDate=MAX('日期表'[Date])//取得所选日期的最大值VAR EndAmount=CALCULATE([值合计],   '日期表'[Date]=EndDate)//计算期末金额return  IF(EndAmount=0,BLANK(),EndAmount)//隐藏项目金额为0的科目


(2)年初金额
期初 =VAR CURyear=MAX('日期表'[年])VAR beginAmt=CALCULATE([期末],  FILTER(ALL('日期表'),  '日期表'[年]=CURyear-1   && '日期表'[季度]=4))return    beginAmt

(3)变动金额
变动 = IF(ISBLANK([期末]),          BLANK(),          [期末]-[期初])

(4)变动率
变动率 = DIVIDE([变动],[期初])


(5)重点关注指标
期末流动比率 = DIVIDE( CALCULATE([期末] ,    '科目表'[科目对照]="流动资产合计(万元)"), CALCULATE([期末] ,    '科目表'[科目对照]="流动负债合计(万元)"))

期末资产负债率 = DIVIDE(   CALCULATE([期末] ,   '科目表'[科目对照]="负债合计(万元)"),   CALCULATE([期末] ,   '科目表'[科目对照]="资产总计(万元)"))

期末现金比率 = DIVIDE( CALCULATE([期末] ,  '科目表'[科目对照] in {"货币资金(万元)","交易性金融资产(万元)"}), CALCULATE([期末] , '科目表'[科目对照]="流动负债合计(万元)"))



第五步,数据可视化 1.  资产项目,选择矩阵



依次将相关度量值,加入值,项目名称加入到行


同时将科目表的类型字段,加入到该矩阵的筛选器,并筛选资产



2.  负债项目与资产项目一样,可直接将矩阵复制一个,将筛选器改为权益



3、选择卡片图,依次将流动比率、现金比率、资产负债率用三个卡片图显示
4、将公司简称、年、季度名称分别加入到三个切片器
调整格式,效果如下:



本节主要介绍了如何建立一个简单模型的思路和方法,选取的也是相对简单的有关资产负债表项目的度量值编写,有关利润表和现金流量表的分析将在后续文章介绍
作者 张震 | 编辑 沐笙 




—— End ——

PowerBI财务分析课程推荐


网易云课堂 扫码



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容