根据报告参数更改SSS报告条件

时间:2014-02-10 21:20:35

标签: reporting-services ssrs-2008 dynamics-crm-2011 bids

我花了一些时间在董事会上查看其他问题,但没有找到类似的东西,所以在这里:

我有一份报告,针对Fetch Query中的最大字符数,符合CRM 2011在线限制。我想有一个下拉框,可以选择“所有联系人”或“选择最多五个联系人”来避免这个问题。

如果选择“所有联系人”选项,我想要从Fetch语句中删除条件,并且仅在选择最多五个选项时包括条件。

我将如何做到这一点?

如果您有任何其他问题,请与我们联系。

尼克

1 个答案:

答案 0 :(得分:0)

您可以使用自定义代码构建SQL,因为SQL本身可以是您手动构建的字符串表达式。假设您的SQL目前看起来像这样:

SELECT ThisField, ThatField
FROM Contacts
WHERE ContactId IN @Contacts

让我们将其更改为构建SQL的字符串表达式:

="SELECT ThisField, ThatField "
& "FROM Contacts "
& "WHERE ContactId IN @Contacts "

现在,我们需要将@Contacts参数拉开,只有在选择了五个或更少的联系人时才选择ContactId

Function ContactsSQL(ByVal parameter As Parameter) AS String
  Dim Result As String
  Result = ""

  If parameter.IsMultiValue Then
    If parameter.Count <= 5 Then
      Result = "WHERE ContactId IN ("
      For i As integer = 0 To parameter.Count-1 
        Result = Result + CStr(parameter.Value(i)) + ", " 
      Next 
      Result = Left(Result, Result.Length - 2) + ") "
    End If
  End If

  Return Result
End Function

此函数构建SQL WHERE子句,仅在选择了五个或更少时才选择联系人,否则返回一个空字符串。现在我们在SQL表达式中使用这个函数:

="SELECT ThisField, ThatField "
& "FROM Contacts "
& Code.ContactsSQL(Parameters!Contacts)

请注意,您在此处传递Contacts参数对象,而不是Value属性。我们在自定义代码函数中访问Value属性。