SSRS的瀑布图

时间:2016-11-24 14:06:14

标签: reporting-services charts reporting business-intelligence reportbuilder3.0

我正在尝试在SSRS Report Builder 2012 3.0中制作瀑布图。它看起来应该是这样的:Chart

我使用了Range图表类型,但我只是彼此相邻的一堆条形图。因此,它们不会从顶部开始,而是像示例中一样向下移动。谷歌对SSRS中的这类图表非常“空洞”,所以我没有想到。我应该考虑某种财产。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我正在从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);

查询结果如下所示。

enter image description here

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

enter image description here

瀑布图

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

enter image description here

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

enter image description here

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

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);

查询结果如下所示。

enter image description here

发生了什么变化?

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

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

enter image description here

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

enter image description here

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

enter image description here

摘要

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

enter image description here