|
本帖最后由 lizhiman2005 于 2017-3-12 21:56 编辑
本人从事财务工作,是某公司的财务总监。由于本科学的是计算机,研究生读的是会计专业,所以对编程、SQL有浓厚的兴趣,当然,计算机专业知识由于过于久远,基本忘得差不多了。因此现在能够用上的就是VBA,SQL了。
之前曾经写过一篇帖子是用SQL来汇总多工作簿数据的。随着科技的发展,微软为我们提供了越来越强大的功能,比如Power BI。
现在工作中每月必须从用友取很多数据,而且还是多账套的,从客户端计算运算效率极低,包括用友的UFO报表等。由此萌发了从服务器直接取数,每月刷新数据来代替UFO报表以及进行必要的财务分析。
目前国内还没有系统的中文PQ书籍,亚马逊网站的几本书全部是国外进口的,我也没有精力去阅读那么多外文内容。在此要感谢张文洲的帖子,本文借鉴了张兄的某些帖子内容,结合自己在实际工作中的运用,希望能给论坛里的朋友们以启发。现进入正题:
需要的知识技能:
1. SQL 语言;
2. 数据透视表,切片器等
3.EXCEL 2016的PQ功能;
4. 要有自己公司的用友服务器登录密码,一般用户名是sa,密码要问自己公司的IT;
5.要清楚知道用友对应版本的数据字典。
最终的计算结果:
利用透视表的切片器功能,随意点选某公司、某年度、月份的科目余额表,进而生成利润表。由于数据是公司的服务器数据,不方便上传EXCEL文件。
代码见下:
let
A_GS_accsum = Sql.Database("172.16.2.16", "UFDATA_588_2012", [Query="select 'A' as '公司',ccode,iyear,iperiod,md from GL_accsum where iyear>=2014 and ccode>='5001'"]), 解释:从服务器选择某账套,紧接着是SQL查询语言,从表GL_accsum取四个字段,并且在前边加一个字段“”公司“”,后边是用友的数据字典。
B_GS_accsum = Sql.Database("172.16.2.16", "UFDATA_888_2012", [Query="select 'B' as '公司',ccode,iyear,iperiod,md from GL_accsum where iyear>=2014 and ccode>='5001'"]),
C_GS_accsum = Sql.Database("172.16.2.16", "UFDATA_188_2013", [Query="select 'C' as '公司',ccode,iyear,iperiod,md from GL_accsum where iyear>=2014 and ccode>='6001'"]),
Append_accsum=Table.Combine({#"A_GS_accsum", #"B_GS_accsum", #"C_GS_accsum"}),将三个公司账套数据追加查询
A_GS_code = Sql.Database("172.16.2.16", "UFDATA_588_2012", [Query="select 'A' as '公司',ccode,ccode_name from code code where ccode>='5001'"]),
B_GS_code = Sql.Database("172.16.2.16", "UFDATA_888_2012", [Query="select 'B' as '公司',ccode,ccode_name from code code where ccode>='5001'"]),
C_GS_code = Sql.Database("172.16.2.16", "UFDATA_188_2013", [Query="select 'C' as '公司',ccode,ccode_name from code code where ccode>='6001'"]),
Append_code=Table.Combine({#"A_GS_code", #"B_GS_code", #"C_GS_code"}),追加查询
Combine_accsum_code=Table.NestedJoin(#"Append_accsum",{"公司","ccode"},#"Append_code",{"公司","ccode"},"NewColumn",JoinKind.RightOuter),合并查询,按照两个表的字段“公司“”和“Ccode”来做合并,合并有四种方式,可按需选择。
#"展开的“NewColumn”" = Table.ExpandTableColumn(Combine_accsum_code, "NewColumn", {"ccode_name"}, {"NewColumn.ccode_name"}),
删除的副本 = Table.Distinct(#"展开的“NewColumn”"),
重排序的列 = Table.ReorderColumns(删除的副本,{"公司", "iyear", "iperiod", "ccode", "NewColumn.ccode_name", "md"}),
重命名的列 = Table.RenameColumns(重排序的列,{{"iyear", "年度"}, {"iperiod", "期间"}, {"ccode", "科目编码"}, {"NewColumn.ccode_name", "科目名称"}, {"md", "金额"}}),
筛选的行1 = Table.SelectRows(重命名的列, each ([公司] <> null)),
添加的后缀 = Table.TransformColumns(筛选的行1, {{"年度", each Text.From(_, "zh-CN") & "年", type text}}),
添加的后缀1 = Table.TransformColumns(添加的后缀, {{"期间", each Text.From(_, "zh-CN") & "月", type text}})
in
添加的后缀1
|
评分
-
2
查看全部评分
-
|