应收账款对于企业管理来说至关重要。
利用普通的Excel函数计算应收款表,不但繁杂易出错。当数据量极大时,又会造成运行效率低下。最关键的是,很难将每日的应收款情况保留下来作为后期应收款分析。
使用数据建模,通过DAX语言即可解决上述所有问题。
假设我们的销售数据报表如下图(实际的报表内容会比下图多的多,但可以通过Power Query将不需要的列删除,只保留需要的列)
先通过Power Query将项目的销售数据追加到一起。
鼠标点在左方的 文件夹图标那,再点击右下角的“转换数据”。
删除不需要的列,保留Name列和Data列。如果Kind列有table或者其他内容,将其筛选掉,只保留sheet类型的。
展开数据后,将重复的标题行删除。
由于需要按照项目来对应收款进行管理,需要建立一个“项目表”,可直接复制查询,删除重复项,删除不需要的列,只保留“项目”列。
关闭并上载的时候按下图选择
回款表结构如下图
如格式非上图所示,可通过Power Query整理成上图所示,同样加载到模型当中。
接下来进行数据建模。
进入Power Pivot模型后,创建日期表
这里Power Pivot会自动根据数据中出现的最早日期和最晚的日期创建一个完整连续日期的表。
接着建立各表之间的关系,关系如下图:
建立一个数据透视表,回到我们的excel界面。
然后就进入到创建度量值。
度量值1: M_销售额=sum('销售数据'[销售金额])
度量值2: M_累计销售额=
var tbl=FILTER(ALL('Calendar'),'Calendar'[Date]<=MAX('Calendar'[Date]))
var result=CALCULATE([M_销售额],tbl)
return result
度量值3: M_回款=SUM('回款明细'[回款金额])
度量值4: M_累计回款=
var tbl=FILTER(ALL('Calendar'),'Calendar'[Date]<=MAX('Calendar'[Date]))
return CALCULATE([M_回款],tbl)
度量值5:M_欠款=[M_累计销售额]-[M_累计回款]
建立好度量值,就可以像拖拽透视表一样,得到下图结果:
点击+,可以看到每日当时的应收款金额。
进一步需要知道最早一期未回款是几号发货的。
那么还要继续建立度量值。
逻辑是先计算总的回款,用每日累计销售额减去总回款,如果差小于0,也就是说当日的款项已付清,我们对已付清的当日按空值处理。如果当日的欠款小于当日的销售额,那就意味着着有回款已经抵了这一天的部分销售额了。那么我们对销售额和当日欠款取小,就得到了当期发货未回金额。
度量值5:M_总回款=CALCULATE([M_回款],ALL('Calendar'))
度量值6:M_当期发货未回款=
var result=MIN([M_累计销售额]-[M_总回款],[M_销售额])
return IF(result<0,BLANK(),result)
这样就得到了最早一日未回款的数据
如果不需要精确到日,按月的层级显示即可。如果还有逾期条款等要素,亦可通过新建列的方式计算逾期账龄。