步进表不排序

时间:2011-03-08 22:02:29

标签: reporting-services ssrs-2008

我正在尝试使用SQL报表生成器3.0创建一个阶梯表报表。步进报告包含组/设备/用户以及每个组/设备/用户的相关总计。

我希望整个报告按照这些总计进行排序,同时按照这种方式对每个步骤进行排序。

目前,用户按总计排序,但不按设备或组排序。

有没有办法对其他步骤进行排序?

2 个答案:

答案 0 :(得分:0)

您可以使用一些嵌套查询在SQL中执行此操作。假设您有以下表格:交易,用户,设备和组。事务表记录用户在设备上的事务,并具有要汇总的金额字段。用户属于组。

因此,您需要为用户,组和组内使用的设备加总金额,这将为您提供如下所示的SQL:

SELECT G.Description AS [Group], D.Description AS Device, U.Description AS UserName, MAX(GT.GroupTotal) AS GroupTotal, MAX(GDT.GroupDeviceTotal) AS GroupDeviceTotal, SUM(T.Amount) AS UserTotal
FROM Transaction AS T
    INNER JOIN User AS U ON L.UserId = F.UserId 
    INNER JOIN Group AS G ON G.GroupId = L.GroupId 
    INNER JOIN Device AS D ON T.DeviceId = L.DeviceId 
    INNER JOIN
        (SELECT GroupId, SUM(Amount) AS GroupTotal
        FROM Transaction 
            INNER JOIN User ON User.UserId = Transaction.UserId
        WHERE (Transaction.TxDate >= '2011-01-01')
        GROUP BY User.GroupId) AS GT ON GT.GroupId = U.GroupId 
    INNER JOIN
        (SELECT GroupId, DeviceId, SUM(Amount) AS GroupDeviceTotal
        FROM Transaction  
            INNER JOIN User ON User.UserId = Transaction.UserId
        WHERE (TxDate >= '2011-01-01')
GROUP BY GroupId, DeviceId) AS GDT ON GDT.GroupId = U.GroupId AND GDT.DeviceId = T.DeviceId
WHERE (T.TxDate >= '2011-01-01')
GROUP BY G.GroupId, D.DeviceId, U.UserId
ORDER BY GroupTotal DESC, GroupDeviceTotal DESC, UserTotal DESC

请注意,您使用的where子句必须在主查询和每个嵌套查询中相同(这是“WHERE(T.TxDate> ='2011-01-01')”位。

答案 1 :(得分:0)

您可以尝试转到“行/列组”区域...然后对于您拥有的每个组,双击该组,选择“排序”,然后根据需要为该组中包含的信息添加尽可能多的排序字段水平。

如果您对数据应用了其他类型...例如tablix / matrix,有时SSRS可能会感到困惑,所以如果我的建议确实对您有所帮助,但存在一些问题,尝试删除你应用于报告中其他地方的数据的所有其他排序,除了这些组...我会从最里面开始并解决,尽量不重复较低组数据中的字段。 (如果这是有道理的)。


编辑:

所以,假设我们有一个兽医办公室的报告,显示客户信息,我们想按personID,petID和visitID进行分组。 Tablix整体将按人名(或姓氏,然后名字......或其他)排序。然后,您的第一个组将对personID进行分组,并按petName排序。第二个较低的组将分组petID并按visitDate排序。第三级将分组在visitID上,并且...除非通过visitTime(如果它不包含在visitDate中),否则不需要进行排序。