【问题标题】:Expand-collapse report with data set based on GROUPING SETS包含基于 GROUPING SETS 的数据集的展开-折叠报表
【发布时间】:2014-05-20 01:10:21
【问题描述】:

我之前在 SSRS 报告中使用过 the Expand/Collapse feature,但在所有这些情况下,都是 Reporting Services 进行分组和总计。这一次,我在我的数据集查询中使用GROUPING SETS 让 SQL Server 处理聚合数据。我想为组创建一个具有展开/折叠功能的报表,但似乎无法正常工作。

复制
首先,这是一种模拟我实际情况的小型复制品的方法。对数据集使用以下查询:

-- Simulating with already denormalized data for sake of simplicity
DECLARE @Order TABLE (Category VARCHAR(20), Product VARCHAR(20), PersonId INT);

INSERT INTO @Order
        (Category, Product, PersonId)
VALUES  ('Fruit', 'Banana', 1)
       ,('Fruit', 'Banana', 1)
       ,('Cakes', 'Chocolate', 1)
       ,('Fruit', 'Apple', 2)
       ,('Cakes', 'Chocolate', 2)
       ,('Cakes', 'Berry Jam', 3)
       ,('Cakes', 'Chocolate', 3)
       ,('Cakes', 'Chocolate', 3)
       ,('Fruit', 'Banana', 4)
       ,('Cakes', 'Berry Jam', 5)

SELECT Category,
       Product,
       COUNT(DISTINCT PersonId) AS NrOfBuyers 
FROM @Order AS o
GROUP BY GROUPING SETS ((), (Category), (Category, Product))

这将提供此输出(我已手动订购输出以说明我的意图):

Category    Product     NrOfBuyers
--------    -------     ----------
Fruit       Apple       1
Fruit       Banana      2
Fruit       NULL        3
Cakes       Berry Jam   2
Cakes       Chocolate   3
Cakes       NULL        4
NULL        NULL        5

为了预示我的目标,这是我想在 Excel 中获得的内容。

预期结果的扩展版本:

预期结果的折叠版本:

到目前为止我所做的尝试:

在编写此问题并创建重现时,我确实意识到我将数据集转储到 tablix 的第一种方法是错误

所以我试图解决这个问题是使用适当的行组重新创建 tablix,如下所示:

除此之外,我还需要在左侧主组的左侧有一列来保持总行的切换“+”。

但是,这为折叠版本提供了不正确的数字:

这些应该不同:Cakes 和 Fruit 的“小计”分别为 3 和 4。

这似乎是 排序 行的问题,所以我检查了 Tablix 的排序,并且 应该 将行排序为“预期结果”中的显示“截图。它没有,过了一会儿我明白了原因:这些组也进行排序。所以我也为组添加了排序,例如这是Product Row Group 的一个:

这似乎改善了一些事情(无论如何它都做了我需要的排序位),但它不能解决折叠状态下的错误数字。

我需要做些什么来完成最后一段并完成报告?

【问题讨论】:

    标签: sql sql-server reporting-services


    【解决方案1】:

    该方法可行,但需要最后一步才能获得折叠状态的正确数字。通过这个设计的问题中的示例知道这一点:

    为此单元格显示以下表达式:

    =Fields!NrOfBuyers.Value
    

    但这偷偷摸摸地似乎归结为:

    =First(Fields!NrOfBuyers.Value)
    

    在折叠行的上下文中对其进行评估时。

    因此,“修复”此问题并获得正确小计的一种方法是将表达式更改为:

    =Last(Fields!NrOfBuyers.Value)
    

    这将在折叠状态下提供所需的输出:

    或半塌陷:

    最后,展开:

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 1970-01-01
      • 2018-03-06
      • 2020-11-21
      • 2021-01-15
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多