我在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作为值?
答案 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