我从 Jan Kö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);
查询的结果如下所示。
我们使用范围柱形图作为基础,它链接到数据集 dsSales。 SalesAmount 列最初用于我们的数据系列。作为类别组,我们选择列 ProductCategoryName。为了更好地说明,图表标题、轴标题和图例可以隐藏。图表现在应该与此类似。
瀑布图
让我们来看看我们的 SalesAmount 数据系列。
范围柱形图有两个值参数,一个高值,当前分配有 Sum(SalesAmount),一个底部值,当前未分配任何值。现在我们如何得到我们的瀑布图?我们要做的是,根据其前身稍微向上或向下移动当前范围。一种可能性是通过表达式计算运行总数。为此,我们使用函数 RunningValue。我概述了该方法,以便在下面更好地理解。
因此,我们将得到这两个表达式,分别代表较高的值和较低的值。
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);
查询的结果如下所示。
发生了什么变化?
- TotalSalesAmount 在单独的行中包含所需的总数。
- CategorySortId 是用于排序的新列,因为总和应该是图表上的最后一个。
- ProductCategoryLabel 已重命名为 CategoryLabel,因为它不再专门包含产品类别的标识符。
由于我们对数据集所做的更改,图表也需要更新。类别组 ProductCategoryName 必须替换为 CategoryLabel。
在类别组属性中调整排序以确保正确的顺序。首先是按照 CategorySortId 排序,然后是 CategoryLabel。
缺少的是所需的总和。为此,通过选择 TotalSalesAmount 添加一个新的数据系列。将 CustomAttribute 属性 DrawSideBySide 设置为 false 可防止像名称所暗示的那样并排绘制具有相等 x 值的数据点。此外,宽度再次通过 PointWidth 减小到 0.6。最终结果如下所示。
总结
我已经向您展示了如何通过现有的标准图表类型和一些表达式来创建另一种图表类型,它不是作为模板提供的。通过组合不同的图表类型,它还具有高度的可定制性和可扩展性。此外,还可以添加数据标签。背景颜色可以根据其值进行调整。可以突出显示不寻常或特殊的数据点。增加观察到的信息的意义所需的一切。仍然是进一步激发您的幻想的预兆。