我在 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。
如何让多选下拉列表将客户名称作为标签,将客户 ID 作为值?
您可以通过执行级联参数来解决此问题。
我没有看到在哪里使用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