按行的详细帐龄报告

Detailed Aging Report by Row

我有一份报告需要在 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

使用以下表达式添加公式。删除现有的四个组并替换为使用新公式的组。

=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"
        )
    )
 )

我不完全确定此逻辑是否完全符合预期结果,但它基于您目前在此处提供的内容。我不知道这两个开始和结束参数的含义,这是我添加警告的原因之一。

注意:该表达式很容易 re-written 作为 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"
 )

我有一个类似的问题,在这里得到了回答。 SSRS Category Grouping

我想你需要使用 switch 函数来完成这项工作。