首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Server中获取上个月四分之一的数据?

如何在Server中获取上个月四分之一的数据?
EN

Stack Overflow用户
提问于 2016-12-02 20:47:25
回答 3查看 1.4K关注 0票数 1

我正在尝试创建一个SSRS报告,它有一个数据矩阵,可以按月、季度或每年分组。我能够正确分组我的数据每月,但我遇到了问题时,试图按任何其他的分组。

下面是一个示例数据集:

代码语言:javascript
复制
Account #     BillingDate     DateActivated      Balance
1             1/1/16          1/1/16             $10,000
1             2/1/16          1/1/16             $9,000
1             3/1/16          1/1/16             $9,500
1             4/1/16          1/1/16             $7,000
1             5/1/16          1/1/16             $4,000
1             6/1/16          1/1/16             $1,000

当我按季度分组时,我只想要该季度的最后一个月的数据,例如,对于Q1,我想要9500美元的余额,而忽略了10,000美元和9,000美元的余额。然而,我的分组正在总结他们,并给我28,500美元。

期望的结果

月报:

代码语言:javascript
复制
                       DateActivated 1/1/16
BillingDate 1/1/6      $10,000
BillingDate 2/1/6      $9,000
BillingDate 3/1/6      $9,500
BillingDate 4/1/6      $7,000
BillingDate 5/1/6      $4,000
BillingDate 6/1/6      $1,500

季度报告:

代码语言:javascript
复制
                       DateActivated Q1
BillingDate Q1         $9,500
BillingDate Q2         $1,000

我一直试图使用子查询,但还没有开始工作。

编辑:我使用一个简单的查询来获得上面的结果:

代码语言:javascript
复制
SELECT AccountNumber, BillingDate, DateActivated, Balance
FROM TestTable
EN

回答 3

Stack Overflow用户

发布于 2016-12-02 21:05:08

这不是一个简单的公式吗?

代码语言:javascript
复制
=sum(switch(month(Fields!BillingDate.value) = 3 ,Balance ,
 month(Fields!BillingDate.value) = 6 ,Balance ,
month(Fields!BillingDate.value) = 9 ,Balance ,
month(Fields!BillingDate.value) = 12 ,Balance,
 month(Fields!BillingDate.value) =  month(@ParameterThruDate),Balance))

矩阵群

代码语言:javascript
复制
DatePart(DateInterval.Quarter,Fields.BillingDate.value)
票数 0
EN

Stack Overflow用户

发布于 2016-12-02 21:36:57

创建两个矩阵如下所示:

月报:

季度报告:

可以使用此表达式计算四分之一行组:

代码语言:javascript
复制
=DatePart(DateInterval.Quarter,Fields!BillingDate.Value)

为了得到四分之一的使用:

代码语言:javascript
复制
="BillingDate Q" & DatePart(DateInterval.Quarter,Fields!BillingDate.Value)

要获得最后一个余额值,请使用:

代码语言:javascript
复制
=SUM(
IIF(Fields!BillingDate.Value=MAX(Fields!BillingDate.Value),Fields!Balance.Value,0
))

还请考虑按帐户创建父行组。

其结果是:

我为Q4创建了一个包含不完整数据的虚拟数据集(11月和12月没有数据)。它显示了如果11月或12月不存在的八元数据。

如果这有帮助的话请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2016-12-02 23:24:39

在我看来,总是最好让sql完成繁重的工作,并保持SSRS相当简单。我将更新您的查询,使其仅根据@period_type参数返回所需的记录。此示例假设您的数据已经按月分组,如示例数据所示。如果不是这样的话,请告诉我,我可以更新这个示例:

代码语言:javascript
复制
if @period_type = 1 -- monthly
    select
        AccountNumber,
        -- convert BillingDate to text so the data type matches the Quarter strings
        convert(varchar(10),BillingDate,101) as BillingDate
        DateActivated,
        Balance
    from TestTable

if @period_type = 2 -- quarterly
    select
        AccountNumber,
        BillingDate
        DateActivated,
        Balance
    from (
         select
             AccountNumber,
             'Q' + cast(datepart(quarter,BillingDate) as char(1)) as BillingDate
             DateActivated,
             Balance,
             row_number() over(partition by datepart(quarter,BillingDate)
                               order by BillingDate desc) keep_this_1
         from TestTable
         ) tt
    where keep_this_1 = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40940587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档