PowerBI-应收账款周转天数(DSO)计算
一个常见的财务指标DSO,通过财务报表口径利用PowerBI进行计算与展示
一、数据准备
首先导入我们的数据,财务维度我们还是根据科目余额表数据进行计算
数据格式如下,可直接从财务系统中下载后导入EXCEL到PowerBI
计算DSO需要计算 应收账款平均余额,涉及到日期函数,因此我们创建一张日期维度表
- 点击顶部菜单栏的 “表(Table)” -> “新建表(New Table)”。
- 在公式栏中输入以下DAX代码:
日期表 =
VAR MinDate = MIN('科目余额表'[年]) & "-01-01" // 自动获取数据中的最早年份
VAR MaxDate = MAX('科目余额表'[年]) & "-12-31" // 自动获取数据中的最晚年份
RETURN
ADDCOLUMNS(
CALENDAR(MinDate, MaxDate),
"年", YEAR([Date]),
"月", MONTH([Date]),
"年月", FORMAT([Date], "YYYY-MM"),
"年月(中文)", FORMAT([Date], "YYYY年MM月"),
"当月天数", DAY(EOMONTH([Date], 0)) // 获取该月实际天数(28/29/30/31)
)
最后记得在模型中加上关联关系,否则时间智能函数(如PREVIOUSMONTH)会失效
二、度量值编写
我们需要先明确DSO的财务计算公式:
应收账款周转天数 = 计算期天数 ÷ 应收账款周转率
应收账款周转率 = 累计主营业务收入 ÷ 应收账款平均余额
1.基础度量值:计算收入与应收余额
首先,我们需要从科目余额表中提取累计主营业务收入和应收账款的期末余额。
// 1. 主营业务收入 (通常科目编码以6001开头)
主营业务收入 =
CALCULATE(
SUM('科目余额表'[贷方金额]),
'科目余额表'[科目名称] = "主营业务收入"
)
主营业务收入_本年累计 =
TOTALYTD(
[主营业务收入],
'日期表'[Date]
)// 2. 应收账款期末余额 (通常科目编码以1122或1123开头)
应收账款期末余额 =
CALCULATE(
SUM('科目余额表'[借方金额]) - SUM('科目余额表'[贷方金额]),
'科目余额表'[科目名称] = "应收账款"
)
2. 核心度量值:计算平均余额
财务上计算周转率时,通常使用“期初期末平均余额”。由于数据是按月滚动的,我们可以利用时间智能函数获取上个月的期末余额作为本月的期初余额。
// 3. 应收账款期初余额 (即上月期末余额)
应收账款期初余额 =
CALCULATE(
[应收账款期末余额],
PREVIOUSMONTH('日期表'[Date]) // 请确保你有一个连续的日期表并与科目余额表关联
)
// 4. 应收账款平均余额
应收账款平均余额 =
DIVIDE(
[应收账款期初余额] + [应收账款期末余额],
2
)
3. 最终度量值:计算周转天数
结合上面的基础数据,计算最终的周转天数。假设我们按“月”来计算,计算期天数通常取30天(或者根据实际月份天数动态计算)。
// 5. 应收账款周转天数
应收账款周转天数 =
VAR 当期收入 = [主营业务收入]
VAR 平均余额 = [应收账款平均余额]
VAR 当期天数 = SELECTEDVALUE('日期表'[当月天数], 30) // 如果日期表有当月天数列最好,否则默认30
// 防止除以0,如果当期没有收入,则返回空
RETURN
IF(
当期收入 > 0,
DIVIDE(平均余额, 当期收入) * 当期天数,
BLANK()
)
三、可视化展现
做一个示例,我们通过一张自定义卡片,包含一个折线图可两个卡片图,综合展示全年DSO和阅读趋势
综上,完成了应收账款周转天数的计算和展示,某些场景下平均应收的计算方式会有所区别,比如使用全年平均,修改特定度量值Dax即可。