如何从多选ssrs报告参数中的多维数组中获取两个值?

时间:2018-05-14 22:56:44

标签: reporting-services ssrs-2008

我在SSRS数据集中有以下SQL查询:

SELECT c.Id
, c.LastName + ', ' + c.FirstName AS CustomerName
, r.PurchaseDate
FROM     tblCustomer c
JOIN Receipt r ON r.CustomerId = c.Id
WHERE  StoreId = @storeId

我还有三个报告参数:开始日期,结束日期和客户。工作流程为:选择开始日期,选择结束日期,然后过滤上述数据集以仅在多选下拉列表参数中显示在开始日期和结束日期内具有收货日期的客户名称。问题是,当客户在日期范围内有多个收据时,客户在下拉参数中会多次显示。我复制了过滤掉重复项的VB代码:

Public Shared Function RemoveDuplicates(parameter As Parameter) As String()

Dim items As Object() = parameter.Value
System.Array.Sort(items)
Dim k As Integer = 0

For i As Integer = 0 To items.Length - 1
If i > 0 AndAlso items(i).Equals(items(i - 1)) Then
Continue For
End If

items(k) = items(i)
k += 1
Next
Dim unique As [String]() = New [String](k - 1) {}
System.Array.Copy(items, 0, unique, 0, k)

Return unique
End Function

效果很好,只是它只在下拉列表中显示客户ID。

如何让多选下拉列表将CustomerName作为标签,将客户ID作为值?

1 个答案:

答案 0 :(得分:1)

您可以通过执行级联参数来解决这个问题。

我没有看到正在使用start_date和end_date参数的位置..

您可以创建另一个数据集,让我们称之为客户。

您的客户日期查询将是:

SELECT DISTINCT
 c.Id
, c.LastName + ', ' + c.FirstName AS CustomerName

FROM     tblCustomer c
JOIN Receipt r ON r.CustomerId = c.Id
WHERE  StoreId = @storeId

--  and Receipt.somedate between @start_date and @end_date

设置您的客户参数,以便从此查询中获取数据。您将只拥有以上选择的客户..

转到客户参数..可用值 - >客户数据集 在那里设置值 - 值字段将是ID,标签字段将是名称

当然,您的主数据集需要@customerID过滤器以及@start_date@end_date