当前季度日期参数 SSRS 的最后一天

Last day of current quarter date parameter SSRS

我希望我的一些 SSRS 报告在 运行.

时默认显示当前财政季度的日期

我在英国,所以第 1 季度 = 01-APR-201830-JUN-2018 等等

我有两个日期参数 (SSRS)。对于第一个参数,我使用了这个表达式:

=DateAdd(DateInterval.Quarter, DateDiff(DateInterval.Quarter, CDate("1/1/1900"), Today()), CDate("1/1/1900"))

当我运行报告时,它默认为01-APR-2018,这就是我想要的。

然而,我一直无法想出一个表达来度过当前季度的最后一天。

任何关于如何实现这一点的想法都将不胜感激。

SSRS 表达式

这是将在您的报告中使用的表达式。

当前季度的最后一天

= DATEADD(
   DateInterval.Day
   , -1
   , DATEADD(
      DateInterval.Quarter
      , DATEPART(DateInterval.Quarter, DateTime.Now )
      , DATESERIAL(YEAR(Now), 1, 1)   
   )
)

T-SQL 例子

这里是 SQL 中的公式,如果您想从查询中获取默认值。这样您就可以在数据库上创建一个视图并使用它,而不必在报表中执行表达式。如果您没有创建视图的权限,则可以仅使用 select 语句在报表服务器上创建 Shared Dataset / .rsd 文件。

当前季度的第一天

SELECT [first_quarter_day] = DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)

当前季度的最后一天

SELECT [last_quarter_day] = DATEADD(dd, -1, DATEADD(qq, 1 ,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)))

查看示例

CREATE VIEW [dbo].[date_defaults]
AS

    SELECT 
      [First_Day_of_Current_Month] = DATEADD(mm, DATEDIFF(mm,0, GETDATE()), 0)
    , [Last_Day_of_Current_Month] = DATEADD(dd, -1, DATEADD(mm, 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)))
    , [First_Day_of_Next_Month] = DATEADD(mm, 1,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))
    , [Last_Day_of_Previous_Month] = DATEADD(dd, -1,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))
    , [First_Day_of_Current_Quarter] = DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)
    , [First_Day_of_Previous_Quarter] = DATEADD(qq, DATEDIFF(qq, 0, GETDATE())-1, 0)
    , [Last_Day_of_Current_Quarter] = DATEADD(dd, -1, DATEADD(qq, 1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)))
    , [Last_Day_of_Previous_Quarter] = DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0))
    , [First_Day_of_Current_Year] = DATEADD(yy, DATEDIFF(yy,0, GETDATE()), 0)
    , [First_Day_of_Previous_Year] = DATEADD(yy, DATEDIFF(yy, 0,DATEADD(yy, -1, GETDATE())), 0)
    , [Last_Day_of_Previous_Year] = DATEADD(dd, -1,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))
    , [This_Day_Last_Year]  = DATEADD(yy, -1, GETDATE())

GO

共享数据集XML示例

注意:您必须使用报表服务器上的数据源更新 DataSourceReference

<?xml version="1.0" encoding="utf-8"?>
<SharedDataSet xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <DataSet Name="date_defaults">
    <Query>
      <DataSourceReference>Your_DataSource_Here</DataSourceReference>
      <CommandText> SELECT 
      [First_Day_of_Current_Month] = DATEADD(mm, DATEDIFF(mm,0, GETDATE()), 0)
    , [Last_Day_of_Current_Month] = DATEADD(dd, -1, DATEADD(mm, 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)))
    , [First_Day_of_Next_Month] = DATEADD(mm, 1,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))
    , [Last_Day_of_Previous_Month] = DATEADD(dd, -1,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))
    , [First_Day_of_Current_Quarter] = DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)
    , [First_Day_of_Previous_Quarter] = DATEADD(qq, DATEDIFF(qq, 0, GETDATE())-1, 0)
    , [Last_Day_of_Current_Quarter] = DATEADD(dd, -1, DATEADD(qq, 1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)))
    , [Last_Day_of_Previous_Quarter] = DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0))
    , [First_Day_of_Current_Year] = DATEADD(yy, DATEDIFF(yy,0, GETDATE()), 0)
    , [First_Day_of_Previous_Year] = DATEADD(yy, DATEDIFF(yy, 0,DATEADD(yy, -1, GETDATE())), 0)
    , [Last_Day_of_Previous_Year] = DATEADD(dd, -1,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))
    , [This_Day_Last_Year]  = DATEADD(yy, -1, GETDATE())</CommandText>
    </Query>
    <Fields>
      <Field Name="First_Day_of_Current_Month">
        <DataField>First_Day_of_Current_Month</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="Last_Day_of_Current_Month">
        <DataField>Last_Day_of_Current_Month</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="First_Day_of_Next_Month">
        <DataField>First_Day_of_Next_Month</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="Last_Day_of_Previous_Month">
        <DataField>Last_Day_of_Previous_Month</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="First_Day_of_Current_Quarter">
        <DataField>First_Day_of_Current_Quarter</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="First_Day_of_Previous_Quarter">
        <DataField>First_Day_of_Previous_Quarter</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="Last_Day_of_Current_Quarter">
        <DataField>Last_Day_of_Current_Quarter</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="Last_Day_of_Previous_Quarter">
        <DataField>Last_Day_of_Previous_Quarter</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="First_Day_of_Current_Year">
        <DataField>First_Day_of_Current_Year</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="First_Day_of_Previous_Year">
        <DataField>First_Day_of_Previous_Year</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="Last_Day_of_Previous_Year">
        <DataField>Last_Day_of_Previous_Year</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
      <Field Name="This_Day_Last_Year">
        <DataField>This_Day_Last_Year</DataField>
        <rd:TypeName>System.DateTime</rd:TypeName>
      </Field>
    </Fields>
  </DataSet>
</SharedDataSet>