Foxtable(狐表)用户栏目专家坐堂 → SQLGroupTableBuilder 有条件的 distinct count 问题


  共有4661人关注过本帖树形打印复制链接

主题:SQLGroupTableBuilder 有条件的 distinct count 问题

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
SQLGroupTableBuilder 有条件的 distinct count 问题  发帖心情 Post By:2014/2/18 23:22:00 [只看该作者]

有点甜老师:
有一个比较棘手的问题:

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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/2/19 8:35:00 [只看该作者]

请上例子,并且说清楚需求吧

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/19 10:34:00 [只看该作者]

统计行数:

 

g.Totals.AddDef("VIP销售笔数",AggregateEnum.Count)  


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/2/19 18:47:00 [只看该作者]

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



 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/2/19 18:51:00 [只看该作者]

重新上传整理过数据的例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:有条件的 distinct count 问题 2.rar


[此贴子已经被作者于2014-2-19 19:22:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/2/19 19:41:00 [只看该作者]

谢谢有点甜老师,你的方法:先查询到结果,再统计一次  有效!!

[此贴子已经被作者于2014-2-19 19:52:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/2/19 21:12:00 [只看该作者]

有点甜老师,那加载树可以加载查询后的统计表吗?
如例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:分项加载查询到结果统计之后的统计表.rar


加载的是统计之后的表 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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()

 回到顶部
总数 11 1 2 下一页