Row详细的老化报告

时间:2016-01-12 18:05:02

标签: sql sql-server reporting-services ssrs-2008-r2

我有一份报告,我需要在SSRS 2008 R2中进行会计处理。这是一份老化报告,显示所有欠款发票分为0-30天,31-60天,61-90天和90天。我有这个查询带来了所有正确的信息。

SELECT DISTINCT
    T.ttfid,
    N.ttfn,
    T.T_DATE,
    T.NUM,
    T.DESCR,
    T.PAYEE,
    T.DEBIT,
    T.CREDIT,
    T.X,
    T.TTYPE,
    T.BORROWER,
    T.INVOICE_N,
    T.PAID_ON,
    T.CHECK_N,
    N.CustId,
    N.LOAN_NO,
    N.CustFn,
    B.LNAME,
    cc.CCODE
FROM TRANS T 
LEFT OUTER JOIN ttMAIN N ON (T.ttfid = N.ttfid)
LEFT OUTER JOIN BORROWER B ON
    (T.ttfid = B.ttfid) AND
    (B.BORR_NO = 1)
LEFT OUTER JOIN ttCC cc ON N.CustId = cc.cid
WHERE
    (
        (T.PAID_ON IS NULL) OR (T.PAID_ON > @dtEnd)
    ) AND
    (T.DEBIT > 0) AND
    (T.T_DATE BETWEEN @dtStart AND @dtEnd)
ORDER BY
    T.PAYEE,
    T.T_DATE DESC,
    T.NUM

在SSRS中,我可以通过CCODE正确分组,并使用像

这样的子组获取正确的总数
=iif(DateDiff("d",Fields!T_DATE.Value, Parameters!dtEnd.Value)>=0 and DateDiff("d",Fields!T_DATE.Value,Parameters!dtEnd.Value)<=30,Fields!T_DATE.Value,nothing)
=iif(DateDiff("d",Fields!T_DATE.Value, Parameters!dtEnd.Value)>=31 and DateDiff("d",Fields!T_DATE.Value,Parameters!dtEnd.Value)<=60,Fields!T_DATE.Value,nothing)
=iif(DateDiff("d",Fields!T_DATE.Value, Parameters!dtEnd.Value)>=61 and DateDiff("d",Fields!T_DATE.Value,Parameters!dtEnd.Value)<=90,Fields!T_DATE.Value,nothing)
=iif(DateDiff("d",Fields!T_DATE.Value, Parameters!dtEnd.Value)>=91 and DateDiff("d",Fields!T_DATE.Value,Parameters!dtEnd.Value)<=99999999,Fields!T_DATE.Value,nothing)

然而,细节最终要么没有显示,要么我会在组之间重复文件,如下所示。

If you notice the ttfn is the same across all groups but only adds to one total.

我在想我需要使用多个数据源或预先排序的查询。上面的SQL查询不是我自己的。我确实有一点SQL经验,并且有大约一年的时间撰写报告。我首先投入了头脑,目前是唯一一个对这一切有所了解的人。如果你确实有答案,请坚持我,因为我不仅希望报告有效,而且还要理解为什么。感谢

Image of the actual report showing the groups

2 个答案:

答案 0 :(得分:0)

使用下面的表达式添加公式。删除您拥有的四个组,并替换为使用新公式的组。

=iif(
    DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 30, "0-30 Day",
    iif(
        DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 60, "31-60 Day",
        iif(
            DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 90, "61-90 Day",
            "91 Day and over"
        )
    )
 )

我不完全确定这个逻辑对于预期的结果是完全正确的,但它是基于你到目前为止提供的内容。我不知道两个开始和结束参数的含义,这是我添加该警告的原因之一。

注意:该表达式也很容易重写为switch()

=switch(
    DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 30, "0-30 Day",
    DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 60, "31-60 Day",
    DateDiff("d", Fields!T_DATE.Value,Parameters!dtEnd.Value) <= 90, "61-90 Day",
    true, "91 Day and over"
 )

答案 1 :(得分:0)

我有一个类似的问题,这里已经回答了。 SSRS Category Grouping

我认为您需要使用切换功能来完成这项工作。