之前有朋友提到了这样一个需求,要计算三年中每年都有销售记录的客户量,仅仅有近期两年有销售纪录的客户量(假如某个用户2012年和2014年都有记录,在2013年没有则不计算在内)。以及近期一年的新增客户数量。这里大概描写叙述一下我的思路。

Sales表有两个字段Id, Year。要求除上述结果须要Group by Id,然后算Count(DISTINCT Year)的值要等于Min(Year)和Max(Year)的差+1。比方以下关于记录:

Year, Id
2014, 14
2013, 14
2012, 14

Max(Year)是2014,Min(Year)是2012。Count(DISTINCT Year)是3。则这个Id是连续三年都有记录的。以下的记录则是连续两年都有记录的:

2013,12
2014,12

Max(Year)是2014。Min(Year)是2013。Count(DISTINCT Year)是2。以下的记录则是近期一年的新客户:

2014,17

Max(Year)是2014,Min(Year)是2014,Count(DISTINCT Year)是1,。

详细代码是这种:

//导入数据
Customer:
LOAD
Year,
Id
From
../QVD/Customer.csv; //获得近期三年中,每一个Id出现的最大年份和最小年份,以及不同Year的数量
Frequency20140609Temp:
LOAD
Id as Id0609Temp,
Min(Year) as MinYear0609Temp,
Max(Year) as MaxYear0609Temp,
Count(DISTINCT Year) as CountYear0609Temp
Resident
Customer
Where
Year>=Year(Now())-2
Group By
Id; //取出Id出现的最大年份减去最小年份+1等于该Id出现的不同年份的数量
Frequency20140609:
LOAD
Id0609Temp as Id0609,
MinYear0609Temp as MinYear0609,
CountYear0609Temp as CountYear0609
Resident
Frequency20140609Temp
Where
MaxYear0609Temp-MinYear0609Temp + 1 = CountYear0609Temp
AND MaxYear0609Temp=Year(Now());//最大年份须要是今年,要不然可能是去年曾经连续两年都有销售记录的Id

以下是图表的Dimension,Expression和Chart:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenBsdW1l/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenBsdW1l/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

如图所看到的,近期一年才有记录的是4个Id。连续两年有销售纪录的是2个Id,连续三年有销售纪录的是8个Id。

以下用一些数据測试一下我的结果。首先在Customer.csv中插入例如以下数据:

2012,18
2013,18
2012,19
2014,19
2013,20
(PS: 上面的这些Id在之前数据源中都不存在,是这次新加的)

依照我如今的逻辑,添加上面Id为18,19,20的记录都不会导致图表发生变化,例如以下所看到的:

再添加例如以下数据。

2014,21
2013,22
2014,22
2012,23
2013,23
2014,23

则上面图表中的三项数据都会+1,例如以下所看到的:

各位看官,假如文中有错还望指教!

感谢感谢!

QlikView报表显示连续若干个月内活跃用户的数量的更多相关文章

  1. 用Redis bitmap统计活跃用户、留存

    Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作. 原文:http://blog.getspool.com/2011/11/29/fast-e ...

  2. 水晶报表显示到aspx页面中

    1.在前台添加水晶报表显示控件. <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server&q ...

  3. RoportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法

    最近在进军测试自动化框架学习阶段,但无意间总是会伴随小问题的困扰,比如中文乱码,而导致显示总是不舒服,个人觉得,就一定要解决,似乎有点点强迫症.所以遇到RoportNG报表显示中文乱码和TestNG显 ...

  4. ReportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法

    最近在进军测试自动化框架学习阶段,但无意间总是会伴随小问题的困扰,比如中文乱码,而导致显示总是不舒服,个人觉得,就一定要解决,似乎有点点强迫症.所以遇到ReportNG报表显示中文乱码和TestNG显 ...

  5. ETL项目2:大数据清洗,处理:使用MapReduce进行离线数据分析并报表显示完整项目

    ETL项目2:大数据清洗,处理:使用MapReduce进行离线数据分析并报表显示完整项目 思路同我之前的博客的思路 https://www.cnblogs.com/symkmk123/p/101974 ...

  6. 通向高可扩展性之路(推特篇) ---- 一个推特用来支撑1亿5千万活跃用户、30万QPS、22MB每秒Firehose、以及5秒内推送信息的架构

    原文链接:http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active ...

  7. Redis-统计活跃用户

    Bitmap(即Bitset)Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作. package test ...

  8. 05 redis中的Setbit位图法统计活跃用户

    一:场景=>>>长轮询Ajax,在线聊天时,能够用到 Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活 ...

  9. 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃 ...

随机推荐

  1. Oracle PLSQL Demo - 06.LOOP循环,以IF判断退出[IF in LOOP]

    declare v_sal ; begin loop v_sal :; dbms_output.put_line(v_sal); then exit; end if; end loop; end;

  2. ph 的使用步骤

    Arcanist用户指南Windows Updated 44 Day(s) Ago所有用户 https://phabricator.webfuns.net/book/phabricator/artic ...

  3. tomcat8源码分析-Connector初始化

    谈起Tomcat的诞生,最早可以追溯到1995年.近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉.很多人早期的J2EE项目,由程序员自 ...

  4. 新闻门户网站图集相册JS代码

    新闻网站jQuery图集相册代码,支持键盘方向键切换,支持点击图片左右区域切换,支持自动轮播,带缩略图.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class= ...

  5. Session过期后自动跳转到登录页面

    最近研究如果用原生的Filter来判别session存在否或者过期否.来跳转到的页面实例,下载来展示代码. 因为顾虑器是每次请求能会进入的,所以可以设置了,进行拦截判断 1.配置web.xml < ...

  6. 【WPF】弹窗定位、弹窗关闭后再打开的报错

    需求:点击按钮,打开一个弹窗. // 获得窗体实例 Window window = openDesignViewModel.View as Window; // 这是使用了WAF框架 //Window ...

  7. C语言 · 黑色星期五

    算法训练 黑色星期五   时间限制:1.0s   内存限制:512.0MB      问题描述 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜” ...

  8. Json转list,两种包,两种方式

    1.使用fastjson 对于json串大小写没什么要求,测试的时候,我把javaBean属性设置成和json串一样的大小写,代码如下: package com.myTest.json.test1; ...

  9. JavaScrip——练习(做悬浮框)

    通过HTML.CSS.JSP来实现 1.首先确定通过div嵌套来实现: 大的div里放默认显示的一层,限制其总层次高,设置超出部分隐藏 小的div里放鼠标移过去时显示的一层:3行1列的表格 1.1.什 ...

  10. Python3分别将list、numpy数组内容写入txt文件中

    1.python保存numpy数据: numpy.savetxt("result.txt", numpy_data) 2.保存list数据: file=open('data.txt ...