我正在尝试在SSRS Report Builder 2012 3.0中制作瀑布图。它应该看起来像这样:reporting-services - SSRS中的瀑布图-LMLPHP

我使用了范围图类型,但彼此之间只有一堆条形图。因此,它们不会像示例中那样从顶部开始向下移动。 Google对于SSRS中的此类图表非常“空白”,因此我没有想法。有一些我应该考虑的属性。

感谢您的帮助。

最佳答案

我将从JanKöhler(j.koehler [at] oraylis [dot] de)的this博客文章中重新发布此帖子,因此,如果确实在某个阶段将其删除,则答案仍然有意义。

在我的示例中,我们需要一个数据集,即dsSales,作为我们的数据源。为此,我们使用以下查询。

SELECT ProductCategoryName, SalesAmount
FROM
(
    VALUES ('Components' , 577.13)
         , ('Accessories', 103.77)
         , ('Bikes'      , 865.08)
         , ('Clothing'   , 118.84)
         , ('Other Vehicles'   , -292.16)
) Sales(ProductCategoryName, SalesAmount);


查询结果如下所示。

reporting-services - SSRS中的瀑布图-LMLPHP

我们使用范围列图表作为基础,该图表链接到数据集dsSales。列SalesAmount最初用于我们的数据系列。作为类别组,我们选择列ProductCategoryName。为了更好地说明,可以隐藏图表标题,轴标题和图例。该图表现在应该看起来与此相似。

reporting-services - SSRS中的瀑布图-LMLPHP

瀑布图

让我们看一下我们的SalesAmount数据系列。

reporting-services - SSRS中的瀑布图-LMLPHP

范围柱形图具有两个值参数,一个高值,当前分配给Sum(SalesAmount),一个底值,当前分配不做任何事情。现在我们如何获得瀑布图?我们想要做的是根据当前的范围将当前范围稍微向上或向下移动。一种可能性是通过表达式计算运行总计。为此,我们使用函数RunningValue。为了更好地理解下文,我概述了该方法。

reporting-services - SSRS中的瀑布图-LMLPHP

结果,我们将获得这两个表达式,分别表示较高和较低的值。

High Value = RunningValue(Fields!SalesAmount.Value, Sum, Nothing)
Low Value = RunningValue(Fields!SalesAmount.Value, Sum, Nothing)
                - Sum(Fields!SalesAmount.Value)


如果我们查看预览,报告现在应该看起来与此类似。

加总

现在我们有了瀑布图,我们可以进行进一步的修改。总数呢?为了简单起见,我们也需要添加一个单独的数据系列。首先,我们从数据集dsSales修改查询。

WITH Sales
AS
(
    SELECT ProductCategoryName, SalesAmount
    FROM
    (
        VALUES ('Components' , 577.13)
             , ('Accessories', 103.77)
             , ('Bikes'      , 865.08)
             , ('Clothing'   , 118.84)
             , ('Other Vehicles'   , 118.84)
    ) Sales(ProductCategoryName, SalesAmount)
)
SELECT *
FROM
(
        SELECT 1, ProductCategoryName, SalesAmount, NULL
        FROM Sales
    UNION ALL
        SELECT 2, 'Sum total', NULL, SUM(SalesAmount)
        FROM Sales
) Result(CategorySortId, CategoryLabel, SalesAmount, TotalSalesAmount);


查询结果如下所示。

reporting-services - SSRS中的瀑布图-LMLPHP

有什么变化?


TotalSalesAmount在单独的行中包含所需的总计。
CategorySortId是用于排序的新列,因为总和应为图表上的最后一个。
ProductCategoryLabel被重命名为CategoryLabel,因为它不再专门包含产品类别的标识符。


由于我们对数据集所做的更改,因此图表也需要更新。类别组ProductCategoryName必须替换为CategoryLabel。

reporting-services - SSRS中的瀑布图-LMLPHP

在“类别组属性”中调整排序以确保顺序正确。首先,它按CategorySortId排序,然后按CategoryLabel排序。

reporting-services - SSRS中的瀑布图-LMLPHP

缺少的是所需的总和。为此,通过选择TotalSalesAmount添加新的数据系列。将CustomAttribute属性的DrawSideBySide设置为false可以防止并排绘制具有相同x值的数据点,如名称所示。同样,通过PointWidth将宽度再次减小为0.6。最终结果如下所示。

reporting-services - SSRS中的瀑布图-LMLPHP

摘要

我向您展示的是如何通过现有的标准图表类型和某些表达式来创建另一种图表类型(未作为模板提供)。通过组合不同的图表类型,它也是高度可定制和可扩展的。另外,可以添加数据标签。可以根据背景色调整背景色。异常或特殊数据点可以突出显示。提高观测信息的意义所必需的一切。仍然是进一步刺激您的幻想的预兆。

reporting-services - SSRS中的瀑布图-LMLPHP

09-27 19:03