SSRS参数和图像怎么了?

What's up with SSRS parameters and images?

我正在努力在 SSRS 中设置报告。我们的报告比较灵活,我希望根据参数动态 select 封面页图像。

这是我的:

在我们的报告数据库中,我设置了一个 图像 table。为了简单起见,假设我有三列:

ImageName, ImageType, and Image.

名称和类型都是varchar,而ImageType是varbinary。我已经将我们计划使用的图像及其名称和相关类型上传到 table。

在我的报告中,我有一个数据源和一个数据集,用于引入上述 table 和列。

我还有一个名为 "ImageName." 的参数,我已将此参数设置为使用 "Image"(来自上述 table)作为其值字段,标签字段是设置 "ImageName."

在报告本身上我有一个图像...控件?报告要素?不知道该怎么称呼它,但我已经设置了一个图像。图像源设置为 "Database" 并且 MIME 类型使用查找函数根据参数从数据集中提取适当的图像类型!ImageName.Label 参数 - 这部分工作 - 我是return每次输入正确的 MIME 类型。

设置图像本身不起作用,但我希望它应该起作用。对于 "Select the image source:" 下的 "Use this field" 字段,我尝试了 =Parameters!ImageName.Value 和基于图像数据集中的 ImageName.Label 的查找都没有成功。两者似乎都不起作用。

当我尝试使用参数值时,出现错误

[rsInvalidDatabaseImageProperty] The value of the ImageData property for the image 'ImageControlName' is "=Parameters!ImageName.Value", which is not a valid ImageData.

我基本上从 lookup 方法 得到了 相同的错误消息,它只是将查找代码替换为上面的 Parameters!ImageName 代码。

如果我尝试通过上面的查找检查 return 类型,我只会得到一个错误。对于参数,如果我检查我得到的类型 System.String 所以我决定打印出来,显然 Parameters!ImageName.Value 的值出于某种原因是 System.Byte[]

我可以使用 First() 函数获取要显示的图像,但我需要能够 select 该图像。我猜我可能需要过滤。 First()有一个return类型的System.Byte[],这似乎是合理的。我只是不明白为什么我的参数 return 将图像数据列的类型作为字符串而不是图像列本身的数据。

那么我该如何让它工作呢?过滤我的数据集是我唯一的选择吗?或者有没有办法让参数工作或获得一些功能,让我 select 合适的图像?

您出错的原因是 ParametersFirst 返回的数据类型有关。

因为返回的 Parameters 数据类型是文本类型,它不是有效的图像数据类型,因此出现错误。

对于First函数,它returns基于表达式类型的数据类型,它returns图像的正确数据类型并显示图像。

Per Microsoft Parameter Data Type:

A report parameter must be one of the following data types:

  • Boolean. The user selects True or False from a radio button.
  • DateTime. The user selects a date from a calendar control.
  • Integer. The user types values in a text box.
  • Float. The user types values in a text box.
  • Text. The user types values in a text box.

When available values are defined for a parameter, the user chooses values from a drop-down list, even when the data type is DateTime.

Per Microsoft First function data type:

Return Type
Determined by the type of expression.

你是正确的,得到了​​过滤数据集所需的正确图像。

  • 创建提供 ImageName、ImageType 和 Image 的数据集。
  • 根据图像参数过滤 ImageName 上的数据集。
  • 现在使用下面的表达式得到正确的图像数据。

    =Fields!Image.Value