【问题标题】:Adding Previous and Next Month Functionality to Calendar Report将上个月和下个月功能添加到日历报告
【发布时间】:2015-10-26 15:53:45
【问题描述】:

所以我要做的是根据输入的开始日期和结束日期在报表生成器中生成日历报表。基于此,我想使用名为“上个月”和“下个月”的日历下方的按钮,点击后,将根据输入的开始日期和结束日期转到上个月或下个月的日历。我已经尝试使用子报告来执行此操作(报告使用新的参数值调用自身),但是在单击一个按钮后退或前进后,它开始按年而不是按月递减或递增。有没有办法做到这一点?我正在尝试使上个月/下个月的切换工作类似于 Micorsoft Outlook 的月视图。

提前致谢!

【问题讨论】:

  • 是什么让它按年而不是按月递减?如何设置新的参数值?
  • 例如,当点击上个月的按钮时,有一个 Go to report Action 传入开始日期参数为 =dateadd("m",-1,dateserial(year(Parameters!start_cymd .Value),month(Parameters!start_cymd.Value),1)) 和结束日期参数为 =dateadd("m",0,dateserial(year(Parameters!end_cymd.Value),month(Parameters!end_cymd.Value) ,0))
  • 是否允许用户选择部分月份的数据?比如 6 月 1 日 - 6 月 10 日?还是他们总是有整整一个月的时间?
  • 现在他们总是根据他们输入的开始日期和结束日期得到一个完整的月份。
  • 如果他们总是得到一个完整的日历月,我发现只提供一个参数会更容易,例如 MonthStart 并从同一日期计算月末。 @TabAlleman 在他的回答中展示了一个很好的例子。

标签: sql sql-server reporting-services ssrs-2012 reportbuilder3.0


【解决方案1】:

根据MSDN,您在表达式中使用了不正确的语法,这让我想知道它是如何工作的。

您的 DateAdd 应该使用 DateInterval 枚举,我不确定您为什么甚至需要使用 DateSerial,但它应该在双引号中包含硬编码参数。

在我看来,这个表达式应该可以满足你的需要:

=dateadd(DateInterval.Month,-1,Parameters!start_cymd.Value)

但根据您的评论,这是假设用户只能选择一整月的数据,因此 start_cymd 参数将始终是该月的第一天。

获取结束日期比较棘手,因为不同的月份有不同的结束日期。这是来自同一 MSDN 页面的示例:

=DateSerial(Year(Parameters!start_cymd.Value), Month(Parameters!start_cymd.Value), "1").AddDays(-1)

这些应该获取上个月的开始和结束日期。反转数学/逻辑以获得下个月。

【讨论】:

  • 嗨,Tab,这行得通——除非报告第二次调用它自己,它开始递减一年并且月份保持不变。换句话说:日历是为开始日期(2015 年 1 月)生成的,报告通过 go to report 操作调用自己,上面的两个日期作为参数传入,输出 2014 年 12 月(正确),报告第二次调用自己,现在返回 2013 年 12 月(不正确)并在每次调用时都以这种模式继续。知道是什么导致了这种行为吗?
  • 不知道。如果一切都如你所描述的那样,这似乎是不可能的。我需要看到它发生以了解如何调试它。你能输入一些东西来在每次迭代中显示start_cymd 的值吗?
  • 老实说不知道我做了什么,但现在它似乎正在工作。感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多