Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

行的计算问题

荒山散人  发表于:2013-02-12 00:46:41  
复制

制作统计报表时,常将业务指标数据通过归属关系,转化为统计报表,用Excel可以实现,但Access如何实现?请哪位大师帮助给出SQL代码或VBA代码。

业务数据表:

指标编码 指标名称 数据值
A11001 个人存款 130000
A11002 企业存款 80000
A11003 机关团体存款 5000
A11004 财政性存款 4000
A11005 其他存款 100
A12001 个人贷款 20000
A12002 单位贷款 70000
A12003 票据融资 6000

归属关系:(格式不限,仅作举例)

行代码 行名称 列属性 归属关系
H001 存款合计 计算列 H002+H003+H004+H005+H006
H002   个人存款 取数列 A11001
H003   企业存款 取数列 A11002
H004   机关团体存款 取数列 A11003
H005   财政性存款 取数列 A11004
H006   其他存款 取数列 A11005
H007 贷款合计 取数列 A12001+A12002+A12003
H008   个人贷款 取数列 A12001
H009   单位贷款 取数列 A12002
H010   票据融资 取数列 A12003
H011 存贷比例 计算列 H007/H001*100

统计报表:

行代码 行名称 数据值
H001 存款合计 219100.00
H002   个人存款 130000.00
H003   企业存款 80000.00
H004   机关团体存款 5000.00
H005   财政性存款 4000.00
H006   其他存款 100.00
H007 贷款合计 96000.00
H008   个人贷款 20000.00
H009   单位贷款 70000.00
H010   票据融资 6000.00
H011 存贷比例 43.82

 

Top
净光 发表于:2013-02-13 08:31:31
荒山散人 发表于:2013-02-13 22:53:35

谢谢1楼给予了帮助,但还没有解决通用性问题。若统计报表中的行及归属关系有变化,每次都需要改写查询代码。如果将例表改动一下,能否给予进一步的帮助?

业务数据表:

指标编码 指标名称 数据值
A00001 指标1 1000
A00002 指标2 1001
A00003 指标3 1002
A00004 指标4 1003
A00005 指标5 1004

归属关系:(格式不限,仅作举例)

行代码 行名称 行属性 归属关系
H001 行1 取数行 A00001
H002 行2 计算行 A00001+A00002
H003 行3 计算行 A00002-A00001
H004 行4 计算行 A00001*A00003
H005 行5 计算行 A00004/A00005
H006 行6 计算行 (A00004+A00005)/A00001*100
H007 行7 计算行 ABS(A00001-A00005)

统计报表:

行代码 行名称 数据值
H001 行1 1000
H002 行2 2001
H003 行3 1
H004 行4 1002000
H005 行5 0.999003984
H006 行6 200.7
H007 行7 4




荒山散人 发表于:2013-02-14 02:30:05


净光 发表于:2013-02-14 08:21:25
楼主就不要太过于为难SQL了。如果要SQL查询语句“读懂”A00001*A00003之类的内容,是不容易的做到的。即使在EXCEL中,你写这样的归属关系,EXCEL也不会为你计算的。还是得在单元格内输入公式。另外,在你的归属关系中(严格地说起来,那不叫归属关系,应该是计算公式)中,在实际工作中主要是合计,而不是乘除关系,在EXCEL中的数据透视表中,也不作乘除运算的。需要时,还得去设计公式。既然使用ACCESS,最好也就按ACCESS的规律去做。在归属关系中,不要用XX类别(行代码)包括什么(指标编码),而应该用什么(指标编码)属于XX类别。这样统计起来就方便一些。属于少数乘除运算的地方。可按二楼附件的思路去做。

陈玉才 发表于:2013-02-14 10:46:15

最终结果

回答你的第一个问题,我对代码不熟悉,就用平常的计算来回答你

请看最后结果 查询



荒山散人 发表于:2013-02-14 13:39:10


荒山散人 发表于:2013-02-14 13:53:14

感谢1楼、4楼的帮助,能否进一步给与帮助?

问题改动一下发不上来,看以下网址:

http://www.access-cn.com/thread-116477-1-1.html



净光 发表于:2013-02-15 08:51:26
7楼给的链接打不开,显示:“抱歉,指定的主题不存在或已被删除或正在被审核”

荒山散人 发表于:2013-02-15 14:15:58


净光 发表于:2013-02-15 17:56:25
你发zezhza@126.com吧

荒山散人 发表于:2013-02-16 00:39:56

                     行的计算问题(业务指标数据根据归属关系转化为统计报表)

业务工作中制作统计报表时,常将业务指标数据通过归属关系,转化为统计报表,用Excel可以实现,但Access如何实现?请哪位大师帮助给出SQL代码或VBA代码。

最好能给个自定义函数,根据取数行属性,查找指标编码相应的数据值, 以归属关系公式进行计算 ,同样再根据计算行属性,查找行代码对应的数据值,以归属关系公式进行计算。

我编写的不完善自定义函数,请帮助修改:

Option Compare Database

'列计算自定义函数未解决列名与abc函数冲突问题
Public Function Ljs(A列, B列, C列, 公式)
    Dim stemp
    For N = 1 To Len(公式)
        If Mid(公式, N, 1) = "a" Then
            stemp = stemp & A列
            
        ElseIf Mid(公式, N, 1) = "b" Then
            stemp = stemp & B列
            
        ElseIf Mid(公式, N, 1) = "c" Then
            stemp = stemp & C列
            
        Else
            stemp = stemp & Mid(公式, N, 1)
        End If
    Next N
    Ljs = Eval(stemp)
End Function

'行计算自定义函数未完善不能使用
Public Function Hjs(id, 数据, 公式)
    Dim idNum As Integer
    Dim sjvar As Variant
    Dim stemp
    For N = 1 To Len(公式)
        If Mid(公式, N, 1) = id Then
            idNum = id
            sjvar = DLookup("[数据值]", "指标数据", "[指标编码] = " & idNum)
            stemp = stemp & sjvar
        Else
            stemp = stemp & Mid(公式, N, 1)
        End If
    Next N
    Hjs = Eval(stemp)
End Function


行的计算问题




荒山散人 发表于:2013-02-16 00:58:46

自定义函数请帮助修改:


Option Compare Database

'列计算自定义函数未解决列名与abc函数冲突问题
Public Function Ljs(A列, B列, C列, 公式)
    Dim stemp
    For N = 1 To Len(公式)
        If Mid(公式, N, 1) = "a" Then
            stemp = stemp & A列
        ElseIf Mid(公式, N, 1) = "b" Then
            stemp = stemp & B列
        ElseIf Mid(公式, N, 1) = "c" Then
            stemp = stemp & C列
        Else
            stemp = stemp & Mid(公式, N, 1)
        End If
    Next N
    Ljs = Eval(stemp)
End Function

'行计算自定义函数未完善不能使用
Public Function Hjs(id, 数据, 公式)
    Dim idNum As Integer
    Dim sjvar As Variant
    Dim stemp
    For N = 1 To Len(公式)
        If Mid(公式, N, 1) = id Then
            idNum = id
            sjvar = DLookup("[数据值]", "指标数据", "[指标编码] = " & idNum)
            stemp = stemp & sjvar
        Else
            stemp = stemp & Mid(公式, N, 1)
        End If
    Next N
    Hjs = Eval(stemp)
End Function



荒山散人 发表于:2013-02-16 01:03:13
净光大师,邮件已发。

煮江品茶 发表于:2013-02-16 09:47:18
总记录:14篇  页次:1/1 9 1 :