【问题标题】:SSRS stacked data bar with variable number of data points具有可变数量数据点的 SSRS 堆叠数据条
【发布时间】:2015-11-01 13:38:20
【问题描述】:

我们一直在尝试为 SSRS 中的堆叠数据栏提出一种灵活的设计,这将允许在 100% 填充的 tablix 列单元格中可视化查看的视频材料的百分比。

目标是清晰地显示用户观看过的视频片段的各个部分。例如 - 我们主持一集长达 1 小时的电视节目,但用户并不总是从头到尾观看整集,我们想知道他们实际观看了视频的哪些部分。用户可能会跳来跳去——开始看一点,然后跳到中间再看一些,然后走到最后。我们使用的流媒体视频系统提供了查看开始和结束位置的详细报告。我们的工作是将所有信息放入一个简洁、固定长度的数据栏中,以便快速显示特定用户观看了给定视频剪辑的数量。

这是报告的理想外观。

在第一行,您会看到用户观看了大约 20% 的视频,然后跃升至 49% 并观看到 54% 然后停止。这导致观看的视频总长度的 25%。

这可以使用堆叠数据条来实现吗?任何建议都非常感谢。

【问题讨论】:

  • 我对“这可能吗”的感觉就是它。您是否有查询返回已开发的相关数据?分享此结果将有助于我们为图表设计提供建议。
  • 我认为范围条形图更适合使用。甘特图也是如此。
  • "在第一行,您会看到用户观看了大约 20% 的视频,然后跃升至 49% 并观看到 54% 然后停止。" - 是那种视频吧? ;)

标签: reporting-services charts ssrs-2012 stacked


【解决方案1】:

我能够通过创建自定义 SSRS 程序集来解决这个问题,该程序集生成位图图像并将其作为字节数组返回,然后在图像表达式字段中使用。

如果有人感兴趣,用于根据视频的观看部分生成图像的部分 C# 代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;

namespace SSRSExtensions
{
    public class ReportFunctions
    {
        public static Byte[] GetViewingRangeImage(String ranges, String imageFormatString, Single width, Single height, String backgroundColor, String foregroundColor, String separatorColor)
        {
            Byte[] retValue = null;

            ImageFormat imageFormat = GetImageFormat(imageFormatString);
            if (imageFormat != null)
            {
                ImageCodecInfo imageCodec = GetImageEncoderInfo(imageFormat);

                Bitmap bitmap = GetViewingRangeImageBitmap(ranges, width, height, backgroundColor, foregroundColor, separatorColor);

                using (EncoderParameters encoderParameters = new EncoderParameters(1))
                {
                    using (EncoderParameter encoderParameter = new EncoderParameter(Encoder.Quality, 100L))
                    {
                        encoderParameters.Param[0] = encoderParameter;

                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            bitmap.Save(memoryStream, imageFormat);

                            retValue = memoryStream.ToArray();
                        }
                    }
                }
            }

            return retValue;
        }
    }
}

图像表达式为:=SSRSExtensions.ReportFunctions.GetViewingRangeImage(Fields!ViewingRange.Value, "PNG", 200, 25, "White", "#808080", "#bfbfbf")

实际范围以逗号分隔的字符串指定,如下所示: 0.000000-10.000000,20.000000-50.000000,90.000000-100.000000.,用户先观看 10%,跳到 20%,观看到 50%,然后跳到 90%,然后终于看完了。

这篇较早的博文 (https://blog.oraylis.de/2012/04/ssrs-custom-drawing-code/) 讨论了如何绘制动态图像并在报告中使用它们。它使用内联VB。如果您想使用 C#,您必须创建一个外部程序集,将其复制到 C:\Program Files\Microsoft SQL Server[SSRS INSTALL FOLDER]\Reporting Services\ReportServer\bin 文件夹并在您的报告中引用它。

如果有人需要有关如何将所有这些都插入 SSRS 报告的更多详细信息,请告诉我,我很乐意提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多