以文本方式查看主题

-  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
--  
各位老师看下例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:有条件的 distinct count 问题.rar



--  作者:fubblyc
--  发布时间:2014/2/19 18:51:00
--  
重新上传整理过数据的例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:有条件的 distinct count 问题 2.rar


[此贴子已经被作者于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
--  
有点甜老师,那加载树可以加载查询后的统计表吗?
如例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:分项加载查询到结果统计之后的统计表.rar


加载的是统计之后的表 


--  作者:有点甜
--  发布时间: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()