将 int 数组传递到 SSRS 图表中?
Passing an int array into an SSRS chart?
我有一个充满数字的逗号分隔字符串,并创建了一个 vb 函数将其转换为整数数组,但这不起作用。它期望什么数据类型,我怎样才能做一些与我想做的类似的事情?
Function StringArrayToIntArray(ByVal s As String) As Integer()
Dim ints = Array.ConvertAll(s.Split(","c), Addressof Convert.ToInt32)
return ints
End Function
如果您仍在寻找答案:SSRS 图表不接受开箱即用的数组。它们旨在与数据集一起使用,因此如果可能的话,我建议创建一个提供所需数据的数据集,而不是尝试使其与数组一起使用。
就是说,如果您确实需要(例如,您必须绘制一个多值报告参数),您可以使用我一直在使用的技巧使其工作:
- 在数组中创建一个包含整数索引的虚拟数据集
- 为 x 值创建一个数组
- 为 y 值创建一个数组
- 在图表中将它们联系起来
对于第 1 步,创建一个您喜欢的新数据集。例如,如果您有一个 SQL 数据源,您可以使用
SELECT row_number() OVER (ORDER BY ID) - 1 AS ID
FROM [SomeTable]
或者,如果您有一个嵌入式 XML 数据集,您可以使用
<Query>
<XmlData>
<?xml version="1.0"?>
<IDs>
<ID>0</ID>
<ID>1</ID>
<ID>2</ID>
</IDs>
</XmlData>
</Query>
步骤2和步骤3,您可以使用拆分功能或自定义代码。
第 4 步很有趣。首先,确保使用虚拟 ID 数据集作为图表类别 (Example screenshot)。接下来,向图表添加一个系列。打开系列属性,对于"Value field",使用下面的表达式
=<NumArrayY>(Fields!ID.Value)
其中 是您的数值数组(例如,您的自定义代码的输出)。然后,对于 "Category field",对 x 值使用类似的表达式
=<NumArrayX>(Fields!ID.Value)
这将满足您的要求,但对于处理同一份报告的其他人来说并不是特别漂亮或明显。请注意,如果 ID 数据集包含数组的行过多,您将收到运行时错误:
[rsRuntimeErrorInExpression] The X expression for the chart ‘Chart1’ contains an error: Index was outside the bounds of the array.
不过,这份报告仍然有效。
我有一个充满数字的逗号分隔字符串,并创建了一个 vb 函数将其转换为整数数组,但这不起作用。它期望什么数据类型,我怎样才能做一些与我想做的类似的事情?
Function StringArrayToIntArray(ByVal s As String) As Integer()
Dim ints = Array.ConvertAll(s.Split(","c), Addressof Convert.ToInt32)
return ints
End Function
如果您仍在寻找答案:SSRS 图表不接受开箱即用的数组。它们旨在与数据集一起使用,因此如果可能的话,我建议创建一个提供所需数据的数据集,而不是尝试使其与数组一起使用。
就是说,如果您确实需要(例如,您必须绘制一个多值报告参数),您可以使用我一直在使用的技巧使其工作:
- 在数组中创建一个包含整数索引的虚拟数据集
- 为 x 值创建一个数组
- 为 y 值创建一个数组
- 在图表中将它们联系起来
对于第 1 步,创建一个您喜欢的新数据集。例如,如果您有一个 SQL 数据源,您可以使用
SELECT row_number() OVER (ORDER BY ID) - 1 AS ID
FROM [SomeTable]
或者,如果您有一个嵌入式 XML 数据集,您可以使用
<Query>
<XmlData>
<?xml version="1.0"?>
<IDs>
<ID>0</ID>
<ID>1</ID>
<ID>2</ID>
</IDs>
</XmlData>
</Query>
步骤2和步骤3,您可以使用拆分功能或自定义代码。
第 4 步很有趣。首先,确保使用虚拟 ID 数据集作为图表类别 (Example screenshot)。接下来,向图表添加一个系列。打开系列属性,对于"Value field",使用下面的表达式
=<NumArrayY>(Fields!ID.Value)
其中
=<NumArrayX>(Fields!ID.Value)
这将满足您的要求,但对于处理同一份报告的其他人来说并不是特别漂亮或明显。请注意,如果 ID 数据集包含数组的行过多,您将收到运行时错误:
[rsRuntimeErrorInExpression] The X expression for the chart ‘Chart1’ contains an error: Index was outside the bounds of the array.
不过,这份报告仍然有效。