powerbi 案例3:财务数据分析(上)

财务分析主要是三大报表:资产负债表、利润表,现金流量表;除了这三大报表之外,要有一些能力需要分析:盈利能力、偿债能力、营运能力、发展能力,杜邦分析。一个完整的财务分析需要这些东西。一般做的最多的是三大报表的分析,后面的那些能力可以在三大报表里面体现出来,最后再单开一页做杜邦分析就可以了。

源数据获取

如何获取财务数据?很多上市公司,每一年每个季度会把自己的财务情况进行公开。这个从网上可以找的到。推荐一些网站。

首先是两个公司代码获取的网址。

公司代码网址 1,上海证券交易所:股票与存托凭证 | 上海证券交易所https://link.wtturl.cn/?target=https%3A%2F%2Fwww.sse.com.cn%2Fassortment%2Fstock%2Flist%2Fshare%2F&scene=im&aid=497858&lang=zh公司代码网址 2,深圳证券交易所:https://link.wtturl.cn/?target=https%3A%2F%2Fwww.szse.cn%2Fmarket%2Fproduct%2Fstock%2Flist%2Findex.html&scene=im&aid=497858&lang=zh深交所官网https://link.wtturl.cn/?target=https%3A%2F%2Fwww.szse.cn%2Fmarket%2Fproduct%2Fstock%2Flist%2Findex.html&scene=im&aid=497858&lang=zh这两个网站都可以帮助获取公司对应 ID。

数据来源网站,新浪财经 :新浪财经_金融信息服务商新浪财经是国内领先的金融信息服务提供平台,以"打破信息不对称"为使命,专注于交易、资讯、数据、服务四大领域。为用户提供7×24小时全球股票、基金、期货、外汇、债券等实时行情与权威资讯。提供全面的金融数据、智能分析工具、资金流向监测、模拟交易及ESG资讯和评级服务。https://link.wtturl.cn/?target=https%3A%2F%2Ffinance.sina.com.cn%2F&scene=im&aid=497858&lang=zh新浪财经是获取数据最多的。如果在新浪财经里面搜索公司,要有简称或者代码或者拼音。

要搜代码的话就可以借助前面的两个网站。上海证券交易所和深圳证券交易所这俩。

1、复制需要获取的公司代码,打开新浪财经

先进入上海证券交易所,想查哪个公司就复制哪个公司的代码。找一个上市时间早一点儿的,数据量多。这个浦发银行看着不错,代码是 600000。

把这个代码复制之后,打开新浪财经。

2、搜索对应的公司代码,点击财务数据,可以看到对应的财务内容

把刚刚复制好的代码粘贴到新浪财经搜索框里,然后会看到一栏选项为 sh600000、类型是 A 股,代码 600000,中文名称是浦发银行的东西,点击。

点击之后就进入到了这个页面。

然后往下啦,一直往下,下面有个叫做财务数据的选项。这里有好几个选项:关键指标、资产负债表、业绩预告、利润表、现金流量表、杜邦分析。我们只要利润表、资产负债表、现金流量表这三个就可以了。这里的关键指标可以通过后面三张表计算出来。

先来点开利润表。可以看到这里也是包含项目大类和细分项目。这里的营业收入和营业支出都是汇总值。

正常来说拉到最后,这张表应该可以下载的。结果发现没有。

所以我们换一家公司来研究。换三一重工。三一重工的代码是 600031。

复制下来粘贴到新浪财经搜索框里。直接点击即可。

找到三一重工的利润表。往下拉,发现也不能下载。

如果我们想下载,不能直接通过财务数据,先点击公司公告。

3、点击公司公告,在公告界面找到财务内容,点击对应的报表拉到最下面然后下载

往下拉,这里有个公司公告,点击进去。

进入到公司公告界面之后再往下滑。在公司公告这里有个财务数据,在这里点进去就可以了。

点击资产负债表。

进入之后,再往下拉,拉到最后有一个 "下载全部历史数据到excel中",点击就可以直接下载。

下载成功之后打开看一看。第一列是报表日期,单位,各种项目名称。然后从第二列一直到最后一列都是财务数据。这是个资产负债表的数据。很明显这个数据需要处理一下。

4、下载之后,无法直接上传到 Powerbi,Powerbi 仅支持 xlsx 的格式,需要进行格式转换

这份数据下载之后无法直接上传到 powerbi,因为 powerbi 仅支持 xlsx 格式的数据。而这份数据的后缀名是 ".xls"。直接上传会报错。另外注意,直接修改后缀名也是不行的。这个表可以给它另存一下。文件类型选择 xlsx 格式,点击保存。

这个时候,我的目标地址就会有一个文件。格式转换之后的三一重工资产负债表。现在把这份文件给它导入一下。点击 Excel 工作簿,选择文件,最后打开。

打开之后,可以在 power query 当中进行数据清洗的操作。现在先不打开,先把三个报表全下载并且格式转换好。

5、将三大报表下载下来之后,统一放到一个文件夹中

正常来讲,三大报表都是要下载下来的。将三大报表下载下来之后,统一放入一个文件夹当中。这里演示一下,如果在 powerbi 当中导入文件夹的话,应该怎么去做。现在把另外两个报表下载一下。

找一下利润表,然后拉到最后,点击下载。

再找到现金流量表,拉到最后,然后点击下载。

把这三张表下载完成之后,同时都进行另存。在刚刚的地址新建一个文件夹,命名为"财务分析三张表"。然后把资产负债表放进去。之后另外下载的那两张表全部用刚刚的方式另存到这个文件夹当中,文件类型选择 xlsx 格式,点击保存。

最后这三张表转换格式成功后,都存入在了同一个文件夹当中。

在 powerbi 导入文件夹

现在要到 powerbi 里面上传文件夹,选择获取数据。

1、选择获取数据,找到文件夹

找到文件夹,然后点击连接。

然后要制定当前文件夹路径,点击浏览,然后找到文件夹所在位置,选中文件夹,然后点击确定。

2、连接要上传的文件夹,点击转换数据,跳转到 powerquery

点击确定之后,可以看到这里有三张表。这里注意,读取的内容不一定是 Excel 内容,而是文件夹当中包含了哪些东西。这里不要组合也不要加载,点击转换数据。直接跳转到 power query 界面。

这里的列非常多,但是唯一要用到的只有 content 列。其余的列都是对 content 的说明。

3、只保留 Content 列,删除除了 Content 列以外的其他列。列中的每一行就是一个 Excel 表格

可以点击任意 Binary 对应的空白的地方,会发现每一个 Binary 对应的就是一个表格。

所以这里只保留一个 content 列,列中的每一行就是一个 Excel 表格。选中 content,鼠标右键,点击删除其他列。之后就得到了唯一的 content 列。

4、选择自定义列,输入公式 Excel.Workbook (Content)

之后要让这一列当中的每一行都打开 excel。找到添加列里面的自定义列。

点击之后,列名不用起,直接输入公式。这个公式是帮我们打开 excel 的。Excel.Workbook,把 Content 插入到小括号当中。然后点击确定。

python 复制代码
Excel.Workbook([Content])

5、删除 Content 列,展开自定义列,保留 Name 及 Data 列,删除其他列

当点击确定之后,多了自定义列,同时每一行都有了一个叫做 Table 的东西。点一下 Table 所在的空白处看一看。发现 Table 对应的是每个列表。

此时,content 没有用了,就可以把它也删除掉。就只保留当前的自定义列。

它是列表,就可以展开。点击右上角的展开图标。取消勾选使用原始列名作为前缀,然后点击确定。

6、展开 Data 列,此时三大报表的内容就在一张表里面了

展开之后,重点注意这个 Data 列。

Data 下方全部都是 Table,点击 Table 对应单元格的空白区域看一看。发现,它其实就是每一个 sheet 表对应的数据。下方这里是可以进行预览的。

第一个是利润表、第二个是现金流量表,第三个是资产负债表。

之后,保留 Name 列和 Data 列,删除其他列。

这会儿继续展开 Data 列,取消勾选使用原始列名作为前缀,点击确定。

7、简单数据清洗,只保留 2021 年到 2026 年的数据

提升标题

作用:把表格第一行数据提取出来,替换掉默认的 Column1/Column2 ...,变成每一列的字段名(列标题),是导入 CSV、无表头 Excel、复制粘贴数据后最常用的数据清洗步骤。

点击主页当中的将第一行用作标题。

发现,除了第一列和第二列,后面的所有其他列都是日期。这里面 "20260331" "20251231" "20250930" 这些东西是季度的财报,每个季度报一次。

删除列

删除掉一些年份的数据,然后后面针对剩余的数据做逆透视列操作。它是从 2001 年开始一直到 2025 年,实际在去分析的时候不会有这么多年度的。把 2020 年以及之前的年份全部删掉,保留 2021 年到 2026 年的。找到 2020 年 12 月份的给它选中,然后按住 SHIFT+END 键,它会把当前列到最后一列全部选中。

选中之后,鼠标右键点击删除列。

点击之后,2021 年之后的所有列都被删除掉了。2021 年 3 月份到 2026 年 3 月份的数据全部被保留了下来。这一步是删除多余内容,实际进行分析的时候,只需要拿几个年度进行分析就可以了。

逆透视列

现在除了第一列和第二列,其他的所有列都要进行逆透视。现在选中 20260331 这列,继续按住 SHIFT+END 键,然后鼠标右键,点击逆透视列,把它们从列维度变为行维度就可以了。

这个就是明细表,当然还没有完事儿,这个还需要处理。除了这种方法,还可以从 Web 获取财务数据。

从 Web 获取财务数据

建立连接并获取数据

首先,确保所在界面的财务数据是能够直接下载的。打开这个网址:https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/part/displaytype/4.phtml

这是华电国际的资产负债表,这个网址的财务数据可以直接下载下来,把它的 url 直接复制一份。

python 复制代码
https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/part/displaytype/4.phtml

然后直接打开 powerbi。打开 powerbi 之后,选择从 Web 获取数据。​

把刚才复制的 url 粘贴进来,然后点击确定。​

连接之后它会出来很多表格。下方有建议的表格,一共是 4 个。​

现在看一下建议的表格,看一下表 17。发现这个表 17 里面有我们想要的内容。有报表日期、货币资金之类的。​

表 18 的内容比较少了。​

表 19 和表 20 里面也有我们想要的内容。​​

也就是,表 17、表 18,以及表 19 里面都有我们想要的东西。

现在先用表 17,勾选表 17,点击转换数据。​

可以看一下,和网站里面内容进行一下对比。第一个是报表日期,最后一个是负债和所有者权益。​​

到 网页 里面去看看。发现都对的上,第一个也是报表日期,最后一个也是负债和所有者权益。​​

所以这个内容能够通过这种方式获取得到。然后这里注意,看一下财报年度获取的是哪些年度的。发现是 2025 年 3 月 31 日到 2026 年 3 月 31 日。​

也就是说,它只获取了今年这个年度。只获取了这一页。现在有个需求,想获取制定年度的财务数据。

指定年度报表获取

首先,在 网站 中选择一年的数据。不要用它默认打开的这个界面。这里不要选择 26 年的,因为 26 年只有一个季度的。我们选择去年,2025。​

选择 2025 之后,现在所展示的界面就是 2025 年的财报数据了。从 2025 年3 月 31 日到 2025 年 12 月 31 日。​

现在,将它的 url 复制一份。然后可以进行一下对比。我们再复制一个 2024 年的 url。

python 复制代码
# 2025 年数据的 url
http://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/2025/displaytype/4.phtml

# 2024 年数据的 url
https://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/2024/displaytype/4.phtml

可以明显看出,这俩 url 之间不同的地方就在于 ctrl/ 后面,并且在的 /displaytype 前的这个部分。这两个 url 的其他位置均一模一样。现在,想获取指定年度的数据的话,和之前番组计划那篇原理是一样的。现在回到 powerbi,将刚刚的东西都删掉,重新建立连接。

点击获取数据,选择 Web。​

然后把 2024 年的 url 放进来。点击确定,然后点击连接。​

建立连接完成之后,还是选择表 17,然后点击转换数据。​

初步清洗数据

这个数据获取到之后,先把它处理一下。将第一行用作标题。这样,上面的 Colums 就去掉了。

然后选择报表日期后面的所有列,报表日期不要选中,然后鼠标右键点击逆透视列。

这样,所有的年份都放在一列了。

完成之后点击高级编辑器来进行指定年度报表的获取。

指定年度报表获取

来到 power query 里面的高级编辑器。​

通过观察,如果想要获取指定年份的数据,直接在url当中替换掉对应的数字为指定的年份即可。​

首先在前面定义一个变量,然后去替换这个地方的数字。这是powerbi 案例一那篇的方法。具体内容可以跳转到这篇文章查看下。在高级编辑器中更改后的代码如下。但是且慢,先不要改。

python 复制代码
(y as number) as table =>
let
    源 = Web.BrowserContents("https://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/&Number.ToText(y)/displaytype/4.phtml"),
    #"从 Html 中提取的表" = Html.Table(源, {{"Column1", "TBODY .head"}, {"Column2", ".head + *"}, {"Column3", ".centerImgBlk TD:nth-child(3)"}, {"Column4", "TD:nth-child(4)"}, {"Column5", "TD:nth-child(5)"}}, [RowSelector="TBODY .head"]),
    更改的类型 = Table.TransformColumnTypes(#"从 Html 中提取的表",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}})
in
    更改的类型

本次用一下不一样的东西。刚才只是获取年份,现在有这样的需求,想一次性把不同的报表,不同年份的数据都给下载下来。现在介绍多报表,多年度的数据获取。

指定年度指定报表获取

还是一样的,找规律。刚刚拿的是华电国际 2024 年的资产负债表,它的网址长这个样子。https://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/2024/displaytype/4.phtml

再看一下华电国际 2024 年的利润表,它的网址长这个样子。https://money.finance.sina.com.cn/corp/go.php/vFD_ProfitStatement/stockid/600027/ctrl/2024/displaytype/4.phtml

再把华电国际 2024 年的现金流量表对应的网址拿过来看一下。https://money.finance.sina.com.cn/corp/go.php/vFD_CashFlow/stockid/600027/ctrl/2024/displaytype/4.phtml

这些是同一个年份不同类型的报表对应的网址。通过观察可以发现只有红色位置的地方不一样。

https://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/600027/ctrl/2024/displaytype/4.phtml

https://money.finance.sina.com.cn/corp/go.php/vFD_ProfitStatement/stockid/600027/ctrl/2024/displaytype/4.phtml

https://money.finance.sina.com.cn/corp/go.php/vFD_CashFlow/stockid/600027/ctrl/2024/displaytype/4.phtml

可以出一个结论,不同类型的报表,它们只有英文的这个地方不一样。

  • 资产负债表:BalanceSheet
  • 利润表:ProfitStatement
  • 现金流量表:CashFlow

你们这个结论之后还要进行一下验证,刚才获取到的是华电国际公司的财务数据。我们来看一下三一重工 2024 年的现金流量表。

三一重工 2024 年的现金流量表的网址长这个样子。

https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_CashFlow/stockid/600031/ctrl/part/displaytype/4.phtml

可以看到它们当中的 CashFlow 都是一样的。唯一和华电国际不一样的就是他们的编码。

华电国际:https://money.finance.sina.com.cn/corp/go.php/vFD_CashFlow/stockid/600027/ctrl/2024/displaytype/4.phtml

三一重工:https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_CashFlow/stockid/600031/ctrl/part/displaytype/4.phtml

本次仅介绍获取公司多年份多报表的数据,也可以自行尝试获取多公司不同年份不同报表的数据。

通过验证之后可以得出结论,url 当中不同的报表对应的单词是不一样的,不同的年度数字不一样。现在我们要实现多报表多年度数据的获取,只要把报表的类型以及对应的年度都通过之前参数的方式都给它进行替代,所以在这里一共需要两个参数,一个表示报表类型,一个表示对应的年度。

首先选取任意一个报表,确保能直接获取到数据,然后在 Power query 中创建参数。这次不在高级编辑器里的 let 上方添加了,在 Power query 当中的主页上方有一个管理参数,点击一下,然后选择新建参数。

一共需要两个参数。

先给第一个参数取个名字叫"年度",说明可以不写,类型可以是任意的,建议的值是任何值,但是当前值是一定要确定。目前获取的是2024年的数据,所以当前值是 2024(这里要注意一下,当前值根据的是获取的是哪一年的数据,如果获取的是 2025 年的数据,当前值就应该是 2025),然后点击确定。

现在已经创建完成了第一个参数,用于获取不同年度的报表。当前值是 2024。

接下来要创建第二个参数,用于获取任意不同类型的报表,这个参数叫做报表类型。不同类型的报表,它们英文的这个地方不同:

  • 资产负债表:BalanceSheet
  • 利润表:ProfitStatement
  • 现金流量表:CashFlow

新建第二个参数。

命名为"报表类型"。因为当前获取的数据是资产负债表,它对应的英文是 BalanceSheet。直接复制粘贴过来,然后点击确定。

然后再回到我们刚开始获取的数据。点一下表17。然后点击高级编辑器。

年份和类型,是在这里获取的,然后把这两个地方分别进行替换就可以了。

首先年份,选中这个数字,先敲两个双引号,双引号中间再敲两个 & 号,再在这两个 & 号中间写上 Text.From(年度),括号内的这个年度就是刚才创建的参数的名字。也就是数字部分替换成:"&Text.From(年度)&"。注意,双引号不要忘记敲。

然后是报表类型,把 BalanceSheet 那个位置选中,改为:"&Text.From(报表类型)&"。然后,不要点完成!!不要!不要!不要点完成!!!还有操作要做。

刚才两个地方改好了之后,选中这个"&Text.From(年度)&",然后点击复制。因为在之前已经进行了提升标题操作,所以需要把下方的年份也替换成变量。

完成之后,再选中当前的表17,鼠标右键,选择创建函数。

函数命名为"多报表多年度获取",然后点击确定。

现在就有两个参数啦。

用一下看看好不好用。现在想获取 2025 年的现金流量表。这里第一个参数就是 2025,第二个参数是 CashFlow。把这两个参数输入进去,然后点击调用。

可以看到,我们成功获取到了华电国际 2025 年的现金流量表数据。说明刚刚的操作没有问题。

本专栏的案例1那篇是在高级编辑器里搞了个参数进去。这次采用的是直接单独建立参数的方法。

多年度多报表获取

先准备一张各年度各报表的表。解释一下,比如想放入 2021 年的资产负债表,但是有一个问题,它是英文的,它不是中文的。就是对于我们自己来说,最后要看到的一定是一个中本的表。所以这个地方要单独准备出来两张表。就是首先我们先准备一张报表类型的表,然后再准备一张年度表,最后这两张表进行合并。

点一下表 17,找到主页,这里有一个输入数据。我们点一下。

点击之后会出现创建表窗口,原本有一个列1,点右边加号会出现列2。因为最终要传入一个英文作为报表类型,所以这个表给它命名为"报表名称表"。列1命名为"英文名",列2命名为"中文名"。然后下一步就是把它们仨对应的字段放进去。第一列的从第一个到最后一个分别是 BalanceSheet,ProfitStatement 和 CashFlow。然后从第二列的第一个到最后一个分别是资产负债表,利润表和现金流量表。点击确定。把这个先创建一下。

现在就已经创建出来了。

这个表创建出来之后再将它复制一份。之后我们要将这个内容变成多年度的。复制之后的那个表的基础上,后面再新增一列。新增的那列年份输入进去是 2021,然后再复制一份,后面新增的那列变成 2022,一直到 2026,这样就形成了多年度多报表的报表。整个流程就是将报表类型表复制多份,分别新建自定义列,这些列的值都是固定的年度。

回到 power query 当中搞一下,右键选中这个表,然后点击第二个复制。给它改个名字叫 2021。

然后点击添加列,选择自定义列,取个名字叫年度。

它的值是固定的,2021,然后点击确定。

等一会,我们可以拿这张表去调用刚才写的自定义函数。把这个英文名传给第一个参数,然后把年度传到年度的那个参数就 OK 了。这是 2021 的。

将报表名称表多复制几份(点击第二个复制),分别改名为 2022,2023,2024,2025。

然后重复前面的步骤 5 次:点击添加列,选择自定义列,取个名字叫年度。值是固定的,分别为 2022,2023,2024,2025。这样每一张表都添加了列并且对应好了年份。

。。。

重复上述步骤一直到 2025 处理好结束

。。。

现在我们已经有了各个年度的名称表,现在我们需要将这些表合并为一张表。选中 2021 这张表,然后点击主页中的追加查询,选择将查询追加为新查询。

选择三个或更多的表。点击 2022 然后点击添加,后面的 2023 2024 2025 这几个年份也是一样的,选中之后点击中间的添加就到右边去了。然后点击确定。

现在这张表可以当做我们的汇总表。

接下来要去调用自定义函数。先将这张表的三个列全部选中,然后点击添加列当中的调用自定义函数。

功能查询直接选择多报表多年度获取。这个函数是刚刚自己创建的。年度栏选择年度,报表类型选择传英文名,因为我们是根据年度和英文名这两列来确定报表的。选择好了之后点击确定。

现在它要开始帮我们获取多年度度报表的数据了。获取完成后,多了一列 Table。点击右上角的符号可以给它展开。然后点击加载更多,之后取消勾选"使用原始列名作为前缀",最后点击确定。

全部展开就可以了。这就是多年度多报表的数据。

展开这个属性来查看,它会包含 2021 到 2025 的全部数据。

接下来,在这个汇总表中可以进行一下数据清洗。

数据清洗

首先,英文名这列可以不要。它是帮助我们获取数据,现在可以删掉了。选中英文名这列,右键,选择删除。

这个中文名,列名应该改一下,叫报表类型。双击,改成报表类型。

这里的年度可以不改。报表日期要改,它是对应的项目。双击,改为报表项目。

然后,属性改为日期,值改为金额。

注意,金额这里 -- 号的表示空值。需要选中这列,然后鼠标右键,把它替换一下,点击替换值。

把两个减号替换为 0,点击确定,这样两个减号的地方就全都处理好啦。

再整体转换类型为小数。鼠标右键这列,点击更改类型,选择小数。

然后再重命名一下表的名字,双击追加1,改为汇总表。

这个汇总表也是最终的明细表。接下来还有个操作,因为这里包含了三种不同类型的表,所以后面在去分析的时候也需要有对应的结构。点击报表类型旁边倒三角可以查看类型。

比如资产负债表,流动资产包含了哪些项目?非流动资产包含了哪些项目?还有流动负债、非流动负债、所有者权益等等,都包含了哪些项目。得有这种层级结构。

如何实现这种层级结构?这就涉及到了结构表的创建。每一张报表都应该有对应的结构才可以。

结构表创建

这里建议,将汇总表单独复制 3 份。鼠标右键,点击第二个复制。

复制完成之后,按照报表类型来筛选。

利润表结构表

第一张表要做的是利润表的结构表,这里选择利润表,点击确定。

删除报表类型、年度、日期,和金额。理论上只保留报表项目其实就可以了。选中报表项目,右键点击,然后选择删除其他列,这样就只会保留报表项目这一列。

双击汇总表(2),改个名字叫利润表结构表。

选中这列,鼠标右键,然后点击删除重复项。

它是作为维度和结构的,所以我们要确保里面的内容是唯一且非空的。然后双击更改列名,改为项目名称。

接下来的步骤和鸡蛋费用用工分析那篇一样。

项目小类

利润表有个项目小类,代码直接照着下面的抄就行了。 利润表结构表项目小类这列的公式如下。先全部选中复制。

sql 复制代码
if
[项目名称]="营业收入"
then "一、营业总收入"
else if
[项目名称]="营业成本" or
[项目名称]="营业税金及附加" or
[项目名称]="销售费用" or
[项目名称]="管理费用" or
[项目名称]="财务费用" or
[项目名称]="研发费用" or
[项目名称]="资产减值损失" or
[项目名称]="公允价值变动收益" or
[项目名称]="投资收益" or
[项目名称]="汇兑收益"
then "二、营业总成本"
else if
[项目名称]="加:营业外收入" or
[项目名称]="减:营业外支出"
then "三、营业利润"
else if
[项目名称]="四、利润总额"
then "四、利润总额"
else if
[项目名称]="减:所得税费用"
then "减:所得税费用"
else if
[项目名称]="归属于母公司所有者的净利润" or
[项目名称]="少数股东损益"
then "五、净利润"
else if
[项目名称]="基本每股收益(元/股)" or
[项目名称]="稀释每股收益(元/股)"
then "六、每股收益"
else if
[项目名称]="七、其他综合收益"
then "七、其他综合收益"
else if
[项目名称]="归属于母公司所有者的综合收益总额" or
[项目名称]="归属于少数股东的综合收益总额"
then "八、综合收益总额"
else if
[项目名称]="减:所得税费用"
then "减:所得税费用"
else ""

复制之后,点击添加列当中的自定义列,起个名字叫做项目小类,然后把刚才复制好的公式粘贴进去,点击确定。

点击确定之后,项目小类就出来了。这是利润表的项目小类。

这个完成以后,我们可以给它添加一个索引列。点击添加列当中的索引列,从 1 开始。添加好之后,按住这列挪到最前面。方便后续排序操作。

资产负债表结构表

资产负债表也是一样的操作,把汇总表复制一份。

双击复制好的这个汇总表,改个名字叫资产负债表结构表。

展开报表类型,选中资产负债表。然后点击确定,这样就把报表类型为资产负债表的数据全部筛选出来了。

和之前的步骤一样,我们只保留报表项目。选中报表项目,鼠标右键删除其他列。

接下来需要去个重。鼠标右键点选中报表项目,点击删除重复项。

双击报表项目,把列名改为项目名称。

这里要创建项目小类和项目大类,先创建项目小类。

项目小类

代码仍然是直接照着抄就行了。 资产负债表结构表项目小类这列的公式如下。先全部选中复制。

sql 复制代码
if
[项目名称]="货币资金" or
[项目名称]="交易性金融资产" or
[项目名称]="衍生金融资产" or
[项目名称]="应收票据及应收账款" or
[项目名称]="应收票据" or
[项目名称]="应收账款" or
[项目名称]="应收款项融资" or
[项目名称]="预付款项" or
[项目名称]="其他应收款(合计)" or
[项目名称]="应收利息" or
[项目名称]="应收股利" or
[项目名称]="其他应收款" or
[项目名称]="买入返售金融资产" or
[项目名称]="存货" or
[项目名称]="划分为持有待售的资产" or
[项目名称]="一年内到期的非流动资产" or
[项目名称]="待摊费用" or
[项目名称]="待处理流动资产损益" or
[项目名称]="其他流动资产" or
[项目名称]="流动资产合计"
then "流动资产"
else if
[项目名称]="发放贷款及垫款" or
[项目名称]="可供出售金融资产" or
[项目名称]="持有至到期投资" or
[项目名称]="长期应收款" or
[项目名称]="长期股权投资" or
[项目名称]="投资性房地产" or
[项目名称]="在建工程(合计)" or
[项目名称]="在建工程" or
[项目名称]="工程物资" or
[项目名称]="固定资产及清理(合计)" or
[项目名称]="固定资产净额" or
[项目名称]="固定资产清理" or
[项目名称]="生产性生物资产" or
[项目名称]="公益性生物资产" or
[项目名称]="油气资产" or
[项目名称]="使用权资产" or
[项目名称]="无形资产" or
[项目名称]="开发支出" or
[项目名称]="商誉" or
[项目名称]="长期待摊费用" or
[项目名称]="递延所得税资产" or
[项目名称]="其他非流动资产" or
[项目名称]="非流动资产合计" or
[项目名称]="资产总计"
then "非流动资产"
else if
[项目名称]="短期借款" or
[项目名称]="交易性金融负债" or
[项目名称]="应付票据及应付账款" or
[项目名称]="应付票据" or
[项目名称]="应付账款" or
[项目名称]="预收款项" or
[项目名称]="应付手续费及佣金" or
[项目名称]="应付职工薪酬" or
[项目名称]="应交税费" or
[项目名称]="其他应付款(合计)" or
[项目名称]="应付利息" or
[项目名称]="应付股利" or
[项目名称]="其他应付款" or
[项目名称]="预提费用" or
[项目名称]="一年内的递延收益" or
[项目名称]="应付短期债券" or
[项目名称]="一年内到期的非流动负债" or
[项目名称]="其他流动负债" or
[项目名称]="流动负债合计"
then "流动负债"
else if
[项目名称]="长期借款" or
[项目名称]="应付债券" or
[项目名称]="租赁负债" or
[项目名称]="长期应付职工薪酬" or
[项目名称]="长期应付款(合计)" or
[项目名称]="长期应付款" or
[项目名称]="专项应付款" or
[项目名称]="预计非流动负债" or
[项目名称]="递延所得税负债" or
[项目名称]="长期递延收益" or
[项目名称]="其他非流动负债" or
[项目名称]="非流动负债合计" or
[项目名称]="负债合计"
then "非流动负债"
else if
[项目名称]="实收资本(或股本)" or
[项目名称]="资本公积" or
[项目名称]="减:库存股" or
[项目名称]="其他综合收益" or
[项目名称]="专项储备" or
[项目名称]="盈余公积" or
[项目名称]="一般风险准备" or
[项目名称]="未分配利润" or
[项目名称]="归属于母公司股东权益合计" or
[项目名称]="少数股东权益" or
[项目名称]="所有者权益(或股东权益)合计" or
[项目名称]="负债和所有者权益(或股东权益)总计"
then "所有者权益"
else ""

复制之后,点击添加列当中的自定义列,起个名字叫做项目小类,然后把刚才复制好的公式粘贴进去,点击确定。

这样,项目小类就添加完成了。

接下来添加项目大类。

项目大类

还是一样的步骤,先将下面的代码复制一份。资产负债表项目大类的公式如下。一共两大类,一个是资产,一个是负债和所有者权益。

sql 复制代码
if
[项目小类]="流动资产" or
[项目小类]="非流动资产"
then "资产"
else if
[项目小类]="流动负债" or
[项目小类]="非流动负债" or
[项目小类]="所有者权益"
then "负债和所有者权益"
else ""

点击添加列当中的自定义列。起个名字叫做项目大类,把复制好的公式粘贴进去,点击确定。

项目大类添加完成。

给它添加一个索引列。点击添加列当中的索引列,从 1 开始。添加好之后,按住这列挪到最前面。

最后是现金流量表结构表。

现金流量表结构表

相同的操作,复制汇总表,并且改名为现金流量表结构表。

展开报表类型,选中现金流量表。筛选号之后,只保留报表项目。选中报表项目,鼠标右键删除其他列。双击报表项目,把列名改为项目名称。

改好名之后右键这列,点击删除重复项,进行去重。

去重完毕后的效果如下。

接下来就可以添加项目小类和项目大类了。先添加项目小类。

项目小类

先将下面的代码复制一份。现金流量表项目小类的公式如下。

sql 复制代码
if
[项目名称]="销售商品、提供劳务收到的现金" or
[项目名称]="收到的税费返还" or
[项目名称]="收到的其他与经营活动有关的现金"
then "经营活动现金流入"
else if
[项目名称]="购买商品、接受劳务支付的现金" or
[项目名称]="支付给职工以及为职工支付的现金" or
[项目名称]="支付的各项税费" or
[项目名称]="支付的其他与经营活动有关的现金"
then "经营活动现金流出"
else if
[项目名称]="经营活动产生的现金流量净额"
then "经营活动产生的现金流量净额"
else if
[项目名称]="收回投资所收到的现金" or
[项目名称]="取得投资收益所收到的现金" or
[项目名称]="处置固定资产、无形资产和其他长期资产所收回的现金净额" or
[项目名称]="处置子公司及其他营业单位收到的现金净额" or
[项目名称]="收到的其他与投资活动有关的现金"
then "投资活动现金流入"
else if
[项目名称]="购建固定资产、无形资产和其他长期资产所支付的现金" or
[项目名称]="投资所支付的现金"or
[项目名称]="取得子公司及其他营业单位支付的现金净额" or
[项目名称]="支付的其他与投资活动有关的现金"
then "投资活动现金流出"
else if
[项目名称]="投资活动产生的现金流量净额"
then "投资活动产生的现金流量净额"
else if
[项目名称]="吸收投资收到的现金" or
[项目名称]="其中:子公司吸收少数股东投资收到的现金" or
[项目名称]="取得借款收到的现金" or
[项目名称]="发行债券收到的现金" or
[项目名称]="收到其他与筹资活动有关的现金"
then "筹资活动现金流入"
else if
[项目名称]="偿还债务支付的现金" or
[项目名称]="分配股利、利润或偿付利息所支付的现金" or
[项目名称]="其中:子公司支付给少数股东的股利、利润" or
[项目名称]="支付其他与筹资活动有关的现金"
then "筹资活动现金流出"
else if
[项目名称]="筹资活动产生的现金流量净额"
then "筹资活动产生的现金流量净额"
else if
[项目名称]="四、汇率变动对现金及现金等价物的影响"
then "四、汇率变动对现金及现金等价物的影响"
else if
[项目名称]="加:期初现金及现金等价物余额"
then "加:期初现金及现金等价物余额"
else if
[项目名称]="五、现金及现金等价物净增加额"
then "五、现金及现金等价物净增加额"
else if
[项目名称]="六、期末现金及现金等价物余额"
then "六、期末现金及现金等价物余额"
else ""

点击添加列当中的自定义列。起个名字叫做项目小类,把复制好的公式粘贴进去,点击确定。

这样,项目小类就添加完成啦。

然后我们去添加项目大类。

项目大类

还是一模一样的步骤。先将下面的代码复制一份。现金流量表项目大类的公式如下。

sql 复制代码
if
[项目小类]="经营活动现金流入" or
[项目小类]="经营活动现金流出" or
[项目小类]="经营活动产生的现金流量净额"
then "一、经营活动产生的现金流量"
else if
[项目小类]="投资活动现金流入" or
[项目小类]="投资活动现金流出" or
[项目小类]="投资活动产生的现金流量净额"
then "二、投资活动产生的现金流量"
else if
[项目小类]="筹资活动现金流入" or
[项目小类]="筹资活动现金流出" or
[项目小类]="筹资活动产生的现金流量净额"
then "三、筹资活动产生的现金流量"
else if
[项目小类]="四、汇率变动对现金及现金等价物的影响"
then "四、汇率变动对现金及现金等价物的影响"
else if
[项目小类]="五、现金及现金等价物净增加额"
then "五、现金及现金等价物净增加额"
else if
[项目小类]="加:期初现金及现金等价物余额"
then "加:期初现金及现金等价物余额"
else if
[项目小类]="六、期末现金及现金等价物余额"
then "六、期末现金及现金等价物余额"
else ""

然后点击添加列当中的自定义列。起名叫项目大类,把复制好的公式粘贴进去,点击确定。

项目大类添加完成。

对于这部分内容实在理解不了的初学者宝宝,可以返回鸡蛋费用那篇认真学习一下结构表。

往下划拉划拉,发现后面有一些项目可以删掉。这些净利润,少数股东权益等等,这些内容在利润表是可以看到的。在这里可以不用要。

选中项目名称,找到主页的删除行,选择删除最后几行。

因为最后一行是 71 行,净利润所在行是 39 行,并且删除的时候要包含净利润,所以一共要删除 71 - 39 + 1 = 33 行。也就是我们要删除最后的 33 行。

我们可以看到操作完成之后,最后一行就是期末现金及现金等价物那行了。

最后,添加一个索引列。点击添加列当中的索引列,从 1 开始。添加好后,按住这列挪到最前面。

还可以把大类放前面,小类放后面。这样看着更顺一些。像这样。前面的两个结构表也是同样操作,这里不演示啦。调整好顺序之后的现金流量表结构表如下。

现金流量表结构表完成啦。现在所有的结构表都创建完成啦,接下来可以去建模分析了。

调整以及建模

在去分析之前,不是所有的表我们都需要。现在这么多表,能用的上的只有汇总表和三个结构表。

其他表不想显示。需要调整一下表的显示,减少干扰。

调整显示

可以这样做,鼠标右键不需要的表,比如表17,可以看到启动加载这个选项被勾选上了。再点一次,取消勾选就可以了。取消之后等会就不会在表格视图中显示了。

报表名称表也不要了。

还有 2021 到 2025 这 5 张表。全部都取消启动加载。取消之后会变成斜体,并且一会儿在表格视图中这些表不会显示出来。

后面还有个调用的函数,也不显示了。

注意,不要把这些表删掉。如果删掉的话,后面一些操作它会出问题。

然后点击主页的关闭并应用。

现在我们创建好了之后可以发现就剩这四张表了。一张汇总表和三张结构表。(其他表没有显示)

建模

关于 bi 建模的基本概念以及一些术语,零基础的宝宝可以返回看一下这两篇:Power BI 使用、finebi 案例3 健身房数据分析(建模),一篇是基于 powerbi 的,一篇是基于 finebi 的建模。这两篇的目录里有"建模",直接点击可以跳转到对应部分。

点一下模型视图,看一下有没有建立模型关系。点击之后发现自动建上了。

但是这个自动建模出来的关系不是我们想要的。它给三张结构表之间创建了模型。三张结构表之间有毛线关系,全部删掉。右键关系点击删除。

这个自动建模出来的关系全部删除后就是这个样子。

重新给它们建模。汇总表里面有一列需要改一下名字,之前没有改。点击表格视图,选择汇总表,双击报表项目,把它改名为项目名称。

然后回到模型视图,通过项目名称,将三张结构表分别与汇总表建立关系。

选中现金流量表的项目名称,拖入到汇总表里面的项目名称上面。可以看到这个模型关系,从现金流量表到汇总表,是一对多的关系。然后点击保存。

用同样的方法,将利润表结构表与汇总表建立模型关系,资产负债表结构表和汇总表也建立模型关系。所有的模型关系建好之后是这个样子。

现在有了三大报表的结构,以及汇总的数据。现在我们要进行数据分析,还需要什么?注意看,这里的所有项目都是按季度来的,所以我们还需要一张日期表。

现在需要单独创建一张日期表,然后与汇总表的日期建立模型。

日期表

回到 power bi 的表格视图,然后点击汇总表,找到表工具当中的新建表。

把下面这个公式复制一下。

sql 复制代码
日期表 = 
VAR min_date=MINX(ALL('汇总表'),'汇总表'[日期])
VAR max_date=MAXX(ALL('汇总表'),'汇总表'[日期])
RETURN
ADDCOLUMNS(
    CALENDAR(min_date,max_date),
    "年度",YEAR([Date]),
    "月份",MONTH([Date]),
    "月份中文",MONTH([Date])&"月",
    "月份名称",FORMAT([Date],"MMMM"),
    "年度月份",FORMAT([Date],"YYYYMM"),
    "季度",QUARTER([Date]),
    "报表期间",SWITCH(QUARTER([Date]),
        1,"第一季度",
        2,"第二季度",
        3,"第三季度",
        4,"第四季度",
        "未知季度"
    ),
    "年季编号",(YEAR([Date])-YEAR(min_date))*4+QUARTER([Date]),
    "年度季度",YEAR([Date])&"Q"&QUARTER([Date])
)

粘贴到新建表这里,然后按回车,新表就已经创建完成了。

双击前面第一个列的列名 Date,将其改为日期。

现在回到模型视图,发现这个日期表和汇总表并没有自动建立模型关系。

我们手动建立一下。选中日期表道中的日期,拖入到汇总表的日期上方。检查一下关系,是从日期表到汇总表,一对多的关系。没有任何问题,然后点击保存。

这样,日期表和汇总表的模型关系就建立好了。

这里有个细节,日期表的日期字段,它的旁边有个日历的图标。

但是汇总表的日期就没有这个图标,这个地方不用太紧张。因为日历图标真正影响的是【DAX 时间智能函数】(TOTALYTD、SAMEPERIODLASTYEAR、DATEADD 等)。不过为了确保字段类型没有问题,还是要确认一下。现在来到表格视图看一下汇总表。选中日期这列,可以看到它的类型是文本类型。

需要手动改为日期类型,改为日期之后就变成了年月日的形式。

为了统一一下,找到日期表,把日期表里面的日期格式也改为日期,都变成了年月日。

都处理好之后,现在回到模型视图,给它刷新一下。

最后发现这个汇总表仍然没有日历的图标。不过不用担心,只要数据类型设置为【日期】,普通筛选、切片器筛选完全正常,不会出现筛选不到数据的情况。

数据和表都处理成这个样子就可以了。以上就是本篇的全部内容,下一篇正式开始进行财务数据的分析操作了。

相关推荐
Sharewinfo_BJ18 天前
PBIP项目结构与文件解析
git·powerbi·智信bi·上北智信
宝桥南山21 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Sharewinfo_BJ25 天前
Power BI 四种核心文件格式解析:PBIX、PBIT、PBIP、PBIR
powerbi
y5236481 个月前
Powerbi 动态矩阵
powerbi
宝桥南山1 个月前
GitHub Copilot - 尝试配置和使用一下Microsoft Fabric Core MCP Server
运维·microsoft·ai·微软·powerbi·fabric
迅易科技2 个月前
Power BI 新功能解读:重构 AI 时代的企业数据建设内核
微软·big data·powerbi
维C°3 个月前
PowerBI数据准备—合并文件夹中同表头Excel或csv
excel·powerbi
维C°3 个月前
PowerBI数据准备—合并同表头的sheet
powerbi
维C°3 个月前
PowerBI数据准备—获取Sharepoint/Onedrive上的Excel
powerbi·sharepoint