自定义预定义的日期范围过滤器
在许多财务报表中,要求有日期过滤器,如用户必须给出开始日期和结束日期才能看到给定时间范围内的数据。但是,如果用户希望在给定的时间段内运行报表,比如一个月、一个季度或一年,他将不感兴趣地计算一周/月/一个季度/一年的开始日期,并将其作为报表的输入。相反,他会有兴趣说他想要一周/月/季度/年的数据。
这些实现是多年来完成的,但我没有找到任何文件解释实现这些的步骤。所以,尽管这对某人有帮助。作为一个新的文件,请随时提供您的意见,以改善。
为了实现这一点,我们通常遵循的术语为'WTD','MTD','QTD',和"YTD"
WTD–周到日期:从周开始到当前日期
MTD–月到日期:从月开始到当前日期
QTD–季度到日期:从季度开始到当前日期
YTD–年到日期:从年开始到当前日期
此处当前日期是用户运行报告
解决方案:
我们可以通过使用宇宙级的条件对象来实现。语法将根据您连接到
Oracle的数据库类型而改变:
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='WTD'然后TRUNC(sysdate,'DAY')
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,不持久)="MTD"然后TRUNC(sysdate,'MONTH')
当@Prompt('Enter value','A',{WTD','MTD','QTD','YTD'},Mono,Free,不持久)="QTD",然后TRUNC(sysdate,'Q')
当@Prompt('Enter value','A',{WTD','MTD','QTD','YTD'},Mono,Free,不持久)="YTD",然后TRUNC(sysdate,'YEAR')
END
和sysdate
SQL Server:
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='WTD'然后DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='MTD'然后DATEADD(month,DATEDIFF(month,淘客是啥,0,GETDATE()),0)
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD','YTD'},Mono,Free,Not \u Persistent)='QTD'然后DATEADD(q,DATEDIFF(q,0,GETDATE()),0)
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD','YTD'},Mono,Free,Not \u Persistent)='YTD'然后DATEADD(year,DATEDIFF(year,0,GETDATE())、0)
END
和GETDATE()
这里会提示用户从列表'WTD'、'MTD'、'QTD'、'YTD'中选择一个值,并根据选择得到给定日期范围的数据。
注意:对于WTD,Oracle和SQL的重要区别是Oracle将一周的开始日期视为星期日,其中SQL服务器把它当作星期一。因此,在计算WTD时,您需要记住这一点,并与您的业务分析师确认该要求。
其他自定义日期范围要求将类似于过去3个月和过去6个月。
您也可以以类似的方式实现这些要求,但唯一的问题是您需要调整日期范围的开始日期基于期间:
对于SQL Server:
最近6个月
日期添加(月,-6,getdate())和结束日期将为getdate()
例如:如果今天的日期为2016年3月10日,则开始日期将为2015年9月10日,日期将为2016年3月10日
最近3个月
日期添加(月,-3,getdate())和结束日期将是getdate()
例如:如果今天的日期是2016年3月10日,那么开始日期将是2015年12月10日,日期将是2016年3月10日
对于Oracle:
最后6个月
开始日期将等于加个月(sysdate,-6)
和
结束日期将是sysdate
最后3个月
开始日期将等于加个月(sysdate,-3)
和
结束日期为系统日期
最后6个季度
选项1:
开始日期为加月(系统日期,-18)
和
结束日期为系统日期
选项2:
表1.年份*100 + 表.月摘录(从系统日期起的年份)*100+摘录(从系统日期起的月份)
和摘录(从添加月份起的年份)(系统日期,-18) )*100+摘录(从添加月份开始的月份(sysdate,-18))
最近6个季度,不包括当前季度
选项1:表.日期在trunc(sysdate,'q')-1和add \u months(trunc(sysdate,'q'),-18)之间
选项2:
表1.年份*100 + 表.月在
提取(trunc的年份(sysdate,'q')-1)*100+之间
提取(trunc的月份(sysdate,'q')-1)
和
extract(year from add\u months(trunc(sysdate,'q'),-18))*100+
extract(month from add\u months(trunc(sysdate,'q'),-18))
HI Divya,大数据时代是什么意思,
非常好的解释。你能解释一下@prompt语法吗,比如用户选择WTD时。你提到TRUNC(Sys date,DAY)会有什么结果?
请您简单介绍一下,我很困惑。
谢谢,
瓦伦
嗨瓦伦,
如果用户选择WTD,那么我们应该显示从本周开始到当前日期的数据。
如果用户今天运行报告,即2016年3月30日,那么他应该获得从3月27日(本周开始)到今天日期的数据。
TRUNC(Sysdate,'DAY')给出2016年3月27日的值
同样,TRUNC(Sysdate,'Month')给出月份的开始日期等
这些oracle特定函数
参考
嗨,迪维亚,
我完全理解你的文件,我很少澄清,请以列表形式确认我的澄清,如果您发现任何更正,请在出现错误的地方更新相同的内容。
作为Web I的新成员,请完整地检查下面提到的澄清,并给出您的改进意见。
澄清:
a)实现WTD、MTD、QTD、YTD,我们的报告需要相应的栏目吗?
例如:年|季度|月|周|产品|销售收入| WTD-?
B)为了达到要求,在宇宙级使用条件对象。
这是正确的程序吗?
步骤:1.项目
|类
|日期(条件对象)在SQL助手中
表.日期当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='WTD'然后TRUNC(sysdate,'DAY')
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='MTD'然后TRUNC(sysdate,'MONTH')
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='QTD'然后TRUNC(sysdate,'Q')
当@Prompt('Enter value','A',{'WTD','MTD','QTD','YTD'},Mono,Free,Not \u Persistent)='YTD'然后TRUNC(sysdate,'年'
结束
和系统日期)
点击验证
2.将宇宙发布到存储库
3.启动Web I・U查询面板
拖动年・季度・月・周・产品・销售收入到结果对象窗格
和・日期筛选(条件对象)
点击运行查询
然后提示用户从列表中选择一个值列表
注:
1.对于WTD,哪种语法是正确的?
TRUNC(sysdate,'Day')或TRUNC(sysdate,'Week')
2.如果TRUNC(sysdate,'Week')给出了一周的开始日期,那么当前日期呢?因为WTD代表从星期一开始到现在的日期。
3.提到这个案子的原因是什么,世界人工智能,?即。,表.日期在案例之间。
C)如果不在universe中创建条件对象,我们可以简单地在报表级别创建WTD。
如果是,请让我知道该过程。
D)在本文档中,您只提到oracle和SQL Server,那么其他数据库呢。
谢谢
Ram
不,不是强制性的。您正在筛选一周或一个月等的数据,但您可以按日期或月份显示报表中的数据。。无论您想要什么级别
trunc(sysdate,'Day')--在您的oracle数据库中检查它
您缺少条件和sysdate的最后一部分)这给出了currentdate
情况是创建带有动态值的数据过滤器。这里,如果用户选择WTD,那么开始日期将是一周的开始日期,云服务器吧,如果用户选择MTD,那么它将是月份的开始日期等
是的,但这不是建议的选项,因为您将把整个数据放入报告中,并在报告中过滤/显示一周/月/年