문제

보고 서비스 (SQL 2008) 보고서가 있습니다. 나는 종말을 같은 달과 연도로 제한해야합니다. 이것은 쉬운 일인 것 같지만 알아낼 수는 없습니다.

현재 저장된 절차에 전달 된 매개 변수를 확인하고 두 개의 DateTime 매개 변수가 같은 달 및 연도에 있지 않은 경우 오류를 제기하고 있습니다. 나는 이것을 달성하는 더 우아한 방법을 찾고 있습니다.

도움이 되었습니까?

해결책

매개 변수 표현식에서 EndDate 값을 확인하고 잘못된 경우 시작 + 1 개월로 설정하십시오.
같은 것 :

= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))

사용자에게 알리는 경우, 적절한 형식 (빨간색 큰 글꼴)과 데이트 매개 변수에 대한 메시지가 잘못된 범위로 숨겨진 텍스트 상자를 배치 할 수 있습니다. 숨겨진 표현 세트에서

= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)

또한 두 작업을 사용자 정의 코드와 결합 할 수 있습니다.

Public DateMessage As String

Public Function ValidateDate(StartDate As DateTime, EndDate As DateTime) As DateTime
  Dim ResultDate As DateTime
  If (DateDiff(DateInterval.Month, StartDate, EndDate) <> 0) Then
    ResultDate = AddDate(DateInterval.Month, 1, StartDate)
    DateMessage = String.Format("End Date parameter value {0} 
      was out of range and was changed to {1}", EndDate, ResultDate)
  Else
    ResultDate = EndDate
  End If
End Function

그런 다음 매개 변수 값 표현식에서 :

= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)

tbdateparameterMessage textbox의 값 속성 :

= Code.DateMessage

그리고 숨겨진 속성 표현 :

= String.IsNullOrEmpty(Code.DateMessage)

편집하다그러나 보고서 실행을 중지하려면이 사용자 정의 코드를 사용하십시오.

Public Function CheckDate(SDate as Date, EDate as Date) as Integer
    Dim msg as String
    msg = ""
    If (SDate > EDate)  Then
        msg="Start Date should not be later than End Date"
    End If
    If msg <> "" Then
        MsgBox(msg, 16, "Parameter Validation Error")
        Err.Raise(6,Report) 'Raise an overflow
    End If
End Function

가져 왔습니다 SQLSERVERCENTRAL 포럼.

다른 팁

종종 SSRS 보고서에서 Msgbox 함수 사용과 관련하여 배포 문제가 있습니다. 그들은 우리의 개발 기계에서 잘 작동하지만 실제로 배포 될 때는 작업하기가 어려울 수 있습니다. 다음은 문제를 설명하는 몇 가지 링크입니다.

MSDN에서

sqldev에서

내 솔루션은 보고서가 중지 된 매우 단순한 구현 이었지만 보고서 뷰어의 사용자에게 표시된 메시지에 대한 보고서 오류가 표시됩니다.

  1. 새 텍스트/문자열 매개 변수 생성 (checkDaterange라고 불렀습니다)
  2. 빈 값을 허용하고 숨겨지게 만듭니다
  3. 사용 가능한 값 = 없음
  4. 고급 = 기본값을 사용합니다
  5. 기본값 = 값 지정 - 값을 지정 - 값을 사용하고, 기능 버튼을 사용하고 다음을 사용합니다. = code.CheckDateParameters (매개 변수! 시작! value, 매개 변수! endDate.Value) - 확인 된 날짜의 매개 변수 이름이 시작됩니다. 그리고 EndDate
  6. 마지막으로 보고서 코드의 경우 다음 코드 스 니펫을 입력합니다.

    Function CheckDateParameters(StartDate as Date, EndDate as Date) as Integer
    Dim msg as String
    msg = ""
    If (StartDate > EndDate) Then
      msg="Start Date should not be later than End Date"
      Err.Raise(22000, "VBCore.Utility", msg)
    End If
    End Function
    

공상은 없지만 필요한 것을 성취합니다.

행운을 빕니다!

보고서가 충돌하는 것보다 낫기 때문에 숨겨진 텍스트 상자 아이디어를 사용했습니다. 내가 달성하고자했던 것은 보고서가 실행되기 전에 사용자가 자신의 매개 변수를 앞쪽으로 변경하도록하는 것이 었습니다.

BTW, 구문이 작동하지 않았습니다. 대신 이것을 사용했습니다.

= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)

아이디어에 감사드립니다.

>     Public Function CheckDate(SDate as Date, EDate as Date) as Integer Dim msg as String
>      msg = ""
>      If (SDate > EDate)  Then msg="Start Date should not be later than End Date"
>      End If
>      If msg <> "" Then MsgBox(msg, 16, "Parameter Validation Error") Err.Raise(6,Report)                    'Raise an overflow
>      End If End Function

그들이 변경하지 않으면 msgbox () 함수는 SSR에서 작동하지 않습니다. SSRS 2010에서는 작동하지 않습니다. Windows 기능이라고 생각하므로 렌더링 된 웹 페이지에서 사용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top