以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- SQLGroupTableBuilder 有条件的 distinct count 问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46200) |
-- 作者:fubblyc -- 发布时间:2014/2/18 23:22:00 -- SQLGroupTableBuilder 有条件的 distinct count 问题 有点甜老师: 有一个比较棘手的问题: Dim g As New SQLGroupTableBuilder("统计表2", "VIP消费信息") g.C g.Groups.AddDef("购买日期", DateGroupEnum.Year, "年") g.Groups.AddDef("购买日期", "月") g.Groups.AddDef("门市专柜编号") g.Totals.AddDef("实收金额", "VIP销售额_值") g.Totals.AddDef("数量","VIP销售件数_值") g.Totals.AddExp("VIP销售笔数",。。。) \'这里不懂得写了。 详细解释在后面 g.SamePeriodGrowth = True g.CircleGrowth = True g.GrandProportion= True g.Build() Tables("经营成果分析_经营成果分析").DataSource = g.BuildDataSource() Tables("经营成果分析_经营成果分析").DataTable.DataCols.Add("物单价", Gettype(Integer), "VIP销售额_值/VIP销售件数_值") 详细解释: VIP销售笔数 的意思为 在一个时间段内(比如一个月)产生了多少笔交易。 例子: 购买日期 VIP卡号 2012-01-15 4910000113 2012-10-19 4910000113 2012-11-07 4910000113 2013-03-14 4910000115 2013-03-14 4910000115 2013-03-14 4910000116 如上例子 4910000113 VIP来过3次,4910000115 VIP来过1次(同一天只算一次交易笔数,有两条记录是因为同一天买了两件,但是只来过一次) 所以: 不能直接取【VIP卡号】字段统计不重复计数 是因为 这样产生少算的情况。(这个时间段产生过两次(含)以上的交易,但只算成了一次交易) 如4910000113 会员的情况 不能直接去【购物日期】字段统计不重复计数 是因为 这样产生少算的情况。(这个时间段不同的VIP在同一天交易,实际有两次及以上的交易,但只算成了一次交易) 如4910000115与 4910000116 会员的情况 那要如何做? [此贴子已经被作者于2014-2-19 0:03:59编辑过]
|
-- 作者:Bin -- 发布时间:2014/2/19 8:35:00 -- 请上例子,并且说清楚需求吧 |
-- 作者:狐狸爸爸 -- 发布时间:2014/2/19 10:34:00 -- 统计行数:
g.Totals.AddDef("VIP销售笔数",AggregateEnum.Count) |
-- 作者:fubblyc -- 发布时间:2014/2/19 18:47:00 -- 各位老师看下例子: |
-- 作者:fubblyc -- 发布时间:2014/2/19 18:51:00 -- 重新上传整理过数据的例子: [此贴子已经被作者于2014-2-19 19:22:39编辑过]
|
-- 作者:fubblyc -- 发布时间:2014/2/19 19:26:00 -- 如例子: 2014-02-16 00:00:00
T700Z001
HAZZYS北京
4910000115
邱骥 2014-02-15 00:00:00
T700Z002
HAZZYS上海
4910000115
邱骥 我用这个代码写: Dim g As New SQLGroupTableBuilder("统计表2", "VIP消费信息") g.C g.Groups.AddDef("购买日期", DateGroupEnum.Year, "年") g.Groups.AddDef("购买日期", "月") g.Groups.AddDef("门市专柜编号") g.Totals.AddDef("实收金额", "VIP销售额_值") g.Totals.AddDef("数量","VIP销售件数_值") g.Totals.AddDef("VIP卡号",AggregateEnum.Count,"VIP销售笔数_值") g.SamePeriodGrowth = True g.CircleGrowth = True g.GrandProportion= True g.Build() Tables("经营成果分析_经营成果分析").DataSource = g.BuildDataSource() Tables("经营成果分析_经营成果分析").DataTable.DataCols.Add("物单价", Gettype(Integer), "VIP销售额_值/VIP销售件数_值") 出现的问题是: 4910000115
邱骥 2014年2月 实际来过两次,但是这个代码就算成一次了。 是因为我是用【月】分组的,统计同一个月的不重复的VIP卡号的计数值,但是4910000115
邱骥 虽然在一个月内是重复值,但是它是这个月内不同的日期来的。如何才能加上呢? [此贴子已经被作者于2014-2-19 19:31:53编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/2/19 19:26:00 -- 呃,之前告诉过你代码的,先查询到结果,再统计一次(这样就不用写代码生成环比了) Tables("经营成果分析_经营成果分析").Fill("Select VIP消费信息.购买日期 As 日期, VIP消费信息.门市专柜编号 As 门市专柜编号, VIP消费信息.门市专柜简称 As 门市专柜简称, SUM(VIP消费信息.实收金额) As VIP销售额, 门店整体销售额.门店整体销售额 As 门店整体销售额 ,SUM(VIP消费信息.实收金额)/门店整体销售额.门店整体销售额 As VIP销售占比,COUNT(DISTINCT VIP消费信息.VIP卡号) As VIP销售笔数,SUM(VIP消费信息.数量) As VIP销售件数, SUM(VIP消费信息.实收金额)/COUNT(DISTINCT VIP消费信息.VIP卡号) As VIP客单价, SUM(VIP消费信息.实收金额)/SUM(VIP消费信息.数量) As VIP物单价, SUM(VIP消费信息.实收金额)/COUNT(DISTINCT VIP消费信息.VIP卡号)/SUM(VIP消费信息.实收金额)/SUM(VIP消费信息.数量) As VIP连带率" _ & " FROM (dbo.VIP消费信息 As VIP消费信息" _ & " INNER JOIN dbo.门店整体销售额 As 门店整体销售额 ON (VIP消费信息.购买日期 = 门店整体销售额.购买日期 And VIP消费信息.门市专柜编号 = 门店整体销售额.门市专柜编号 ))" _ & " GROUP BY VIP消费信息.购买日期, VIP消费信息.门市专柜编号, VIP消费信息.门市专柜简称, 门店整体销售额.门店整体销售额", "VIP数据", True) Dim g As New GroupTableBuilder("统计表2", Tables("经营成果分析_经营成果分析").DataTable) g.Groups.AddDef("日期", DateGroupEnum.Year, "年") g.Groups.AddDef("日期", "月") g.Groups.AddDef("门市专柜编号") g.Groups.AddDef("门市专柜简称") g.Totals.AddDef("VIP销售额") g.Totals.AddDef("VIP销售占比") g.Totals.AddDef("VIP物单价") g.Totals.AddDef("VIP销售笔数") g.SamePeriodGrowth = True g.CircleGrowth = True Tables("经营成果分析_经营成果分析").DataSource = g.BuildDataSource() |
-- 作者:fubblyc -- 发布时间:2014/2/19 19:41:00 -- 谢谢有点甜老师,你的方法:先查询到结果,再统计一次 有效!! [此贴子已经被作者于2014-2-19 19:52:33编辑过]
|
-- 作者:fubblyc -- 发布时间:2014/2/19 21:12:00 -- 有点甜老师,那加载树可以加载查询后的统计表吗? 如例子: 加载的是统计之后的表 |
-- 作者:有点甜 -- 发布时间:2014/2/19 21:21:00 -- 一样这样写的,在双击事件的后面加入这段代码 Dim g As New GroupTableBuilder("统计表2", Tables("经营成果分析_经营成果分析").DataTable) g.Groups.AddDef("日期", DateGroupEnum.Year, "年") g.Groups.AddDef("日期", "月") g.Groups.AddDef("门市专柜编号") g.Groups.AddDef("门市专柜简称") g.Totals.AddDef("VIP销售额") g.Totals.AddDef("VIP销售占比") g.Totals.AddDef("VIP物单价") g.Totals.AddDef("VIP销售笔数") g.SamePeriodGrowth = True g.CircleGrowth = True Tables("经营成果分析_经营成果分析").DataSource = g.BuildDataSource() |