我希望有人可以帮忙解决这个问题吗?
我正在根据存储过程构建报告,其中包含以下子句
其中accountingperiod = @Accountingperiod或@Startdate和@Enddate之间的创建日期
@Accountingperiod将采用以下格式'2017年10月' @Start和@Enddates只是通用日期格式。
我基本上希望加载报告,并可以选择是否要使用@Accountingperiod参数或日期参数来过滤报告(因为两者都会带回完全不同的数据)。一旦用户选择了要使用的参数,就可以选择参数(例如@accountingperiod)。
如何实现这一目标?抱歉,如果这是一个愚蠢的问题,我对SSRS很新!
谢谢
答案 0 :(得分:1)
有几种方法可以做到这一点。最简单的方法是在存储过程中执行此操作,然后测试是否已设置会计期间,如果是,则使用该项,如果不使用日期范围但对用户可能不直观,因为他们可以选择会计期间和日期范围没有意识到日期范围会被忽略。
最优雅的解决方案是根据会计期间设置开始日期和结束日期,并在会计期间列表中添加另一个名为“日期范围”或“任意”等的条目。
这假设您可以查找或计算每个会计期间的开始和结束日期。为了在这个例子中简单起见,我们假设你有一个表格(比如说myAccPeriodTable
),里面有句号和日期范围,就像这样......
AccPeriodID AccPeriod StartDate EndDate
1 2017-Q1 2017-01-01 2017-03-31
2 2017=Q2 2017-04-01 2017-06-30
3 2017=Q3 2017-07-01 2017-09-30
etc...
使用以下查询
创建数据集(让我们称之为dsAccPeriods
)
SELECT AccPeriodID, AccPeriod FROM myAccPeriodTable
UNION SELECT -1, 'Use Date range'
ORDER BY StartDate
您的会计期间参数(假设这称为@AccPeriodID)Available Values
来自查询并指向dsAccPeriods
Value
为AccPeriodID
字段,Label
字段为AccPeriod
现在分别使用以下查询创建两个数据集,dsDefaultStartDate
和dsDefaultEndDate
。
SELECT ISNULL(StartDate, 1999-01-01) AS StartDate From myAccPeriodTable WHERE AccPeriodID = @AccPeriodID
和
SELECT ISNULL(EndDate, 2020-12-31) AS EndDate From myAccPeriodTable WHERE AccPeriodID = @AccPeriodID
对于'StartDate'参数(假设其名为@StartDate
),Default Value
只会指向dsDefaultStartDate
数据集并对@EndDate执行相同操作,并将其指向dsDefaultEndDate
}。
现在,当用户选择开始日期时,应使用正确的日期填充两个数据参数,以便您的存储过程可以根据@StartDate和@EndDate参数进行简单过滤。如果用户选择use Date Range
选项,则默认日期将设置为您在dsDefaultStartDate
和dsDefaultEndDate
数据集中指定的任何日期。
当然,用户有可能选择一个真实的会计期间,然后更改日期范围。你可以采取一些措施来避免这种情况,但一步一步!
我写了这个答案而没有测试任何东西,所以可能会有一些错误,但希望它会指向你正确的方向。如果您有任何问题,请发表评论。