我正在使用Crystal Reports2016。数据源是MS SQL Server 2008 R2。目前,我可以使用参数提示用户输入报告的日期范围。我还想添加一个时间范围的提示。使用提示输入DateTime参数不能满足我的要求。日期范围将选择一个较大的天数窗口,时间范围将选择该报表在一天中显示数据的时间。使用DateTime参数提示符仅会增加报表的开始和结束日期/时间的精度,并且无法满足我的要求。两种提示都将引用数据库中的同一DateTime记录。
我试图在同一时间添加一个单独的第二个参数提示,但这与将参数提示更改为DateTime值具有相同的结果。我要重申:这不是我想要的结果。
作为一个具体的具体示例,我想使用在9月1日至10月31日有效的数据,在该数据中,我所报告的事件发生在美国东部标准时间的下午2点至晚上10点之间。如果选择了DateTime,则可以选择9月1日下午2点和10月31日晚上10点。但是,这不是我要选择的。
基本上,选择在下午2点到晚上10点之间的这几天发生的数据。选择开始日期和结束日期的地方;以及开始时间和结束时间是可选的。
使用SQL的说法,我想我想要一个日期范围和时间范围(中间一个)的内部联接:
一个完全无关但相似的例子;这种现象类似于Outlook中的会议。您可以(但不应该)进行一次很长的会议,从1天/时间开始,几天后又到另一天/时间结束,但是您应该进行定期会议以正确管理您和您房间的时间表。我希望以与定期会议类似的方式选择记录。
如何制定select expert
规则以获取所需的数据?我还有其他方法可以做到这一点吗?也许是子报表?
1
可能为时已晚,因为此Q现在已经一周。我会将其重写为示例输入,必需的输出以及您在解决方案中的最佳尝试(我知道作为CR开发人员,您依赖于许多嵌入式小部件,这使发布更加困难)。但是按原样,我无法想象您要具体解决的问题是什么。如果您说“我正在获取2017-05-12.00:00:00Z,但我想要2017-05-12.23:59:59”,那么我认为很多人会发现它更容易提供帮助。祝好运。
—
剥壳机'17
一个简单的解决方案也许是在MS SQL中创建一个数据库视图,该数据库视图指向该报表获取数据的另一个表,但
—
Pimp Juice IT
HH
使用该DATEPART
函数告诉它仅获取[小时] 在2 PM到10 PM之间的值。因此,例如,无需SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22
在视图中显式使用列,然后指向select expert
报表以从中获取选定日期段的数据。另一种方法是使同一T-SQL查询成为CR SQL命令,但SQL视图的性能可能要好得多。
所以要清除查询您可能需要使用作为SQL视图或CR SQL命令对象将发挥SQL
—
Pimp Juice IT
SELECT * FROM Table WHERE DATEPART(hh,[DateField]) BETWEEN 14 AND 22
,你可以列与特定的SQL视图的查询等等select column1, column2 FROM ~
等来代替*
。
我的例子是一个具体的例子。我想让用户确定开始时间和结束时间,这就是我提到参数的原因。我对SQL Views不太了解,但是我猜测如果我将类似的内容粘贴到某个地方,它是静态设置的,并且运行报告的用户无法即时更改它。在这方面,我将说明这个问题。
—
YetAnotherRandomUser17年
好的,如果用户选择时间范围,那将是行不通的。这可能是存储过程的工作。我已经没有CR了,已经有一年左右的时间了,因为我搞砸了它来测试任何东西,但是我想我可以为潜在的SQL级解决方案提供帮助,前提是您可以设置CR部分并配置为允许TSQL做不知道是否可以构建一个存储的proc并传递开始和结束时间参数,并为这些值提供CR动态提示,等等。但是我想我至少会给您一些想法...祝您好运而不管。
—
Pimp Juice IT