具有可变数量数据点的SSRS堆叠数据条

问题描述:

我们一直在尝试为SSRS中的堆叠数据栏提供灵活的设计,以便在100%填充的Tablix列单元格中显示所观看视频材料的百分比。具有可变数量数据点的SSRS堆叠数据条

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

这是报告的期望外观。

Here's the desired look of the report

在第一行,你会看到用户已经观看了视频的20%左右,则跃升至49%,并观看,直到54%,然后停止。这导致观看视频总长度的25%。

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

+0

我觉得“这是可能的”是它是。您是否有查询返回已开发的相关数据?共享这个输出将有助于我们为图表设计提供建议。 – Jonnus

+0

我认为范围条形图更适合使用。这与甘特图相同。 – Kim

+0

“在第一行中,您会看到用户浏览过大约20%的视频,然后跳到49%,然后观看直到54%,然后停下来。” - 它那种视频吧? ;) – bushell

我能够通过创建一个定制的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(字段!ViewingRange.Value, “PNG”,200,25, “白”, “#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报告的其他详细信息,请告诉我,我很乐意帮助。