2009-03-03 7 views
8

मेरे पास दो दिनांक/समय पैरामीटर - begindate और enddate के साथ एक रिपोर्टिंग सेवाएं (SQL 2008) रिपोर्ट है। मुझे शुरुआत के रूप में उसी महीने और वर्ष के अंतराल को रोकने की जरूरत है। ऐसा लगता है कि यह करना एक आसान काम होना चाहिए, लेकिन मैं इसे समझ नहीं सकता।रिपोर्टिंग सेवाएं पैरामीटर प्रतिबंध

वर्तमान में, मैं संग्रहीत प्रक्रिया में पारित पैरामीटर की जांच कर रहा हूं और यदि दो डेटाटाइम पैरामीटर एक ही महीने और वर्ष में नहीं हैं तो त्रुटि उत्पन्न कर रहा हूं। मैं इसे पूरा करने का एक और शानदार तरीका ढूंढ रहा हूं।

उत्तर

6

आप पैरामीटर अभिव्यक्ति में एंडडेट मान की जांच कर सकते हैं, और यदि यह गलत है, तो इसे StartDate + 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 पाठ बॉक्स के मूल्य संपत्ति में:

= 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 forum से लिया है।

+0

मैंने इसके बारे में सोचा, लेकिन समस्या यह है कि उपयोगकर्ता यह नहीं देख सकता कि तारीख समायोजित की गई थी। मैं जो करना चाहता हूं वह एक संवाद प्रदर्शित करने जैसा कुछ है जो उन्हें बता रहा है कि तिथियां उसी महीने में होनी चाहिए। – jhale

0

मैंने छिपे हुए टेक्स्ट बॉक्स विचार का उपयोग किया क्योंकि यह रिपोर्ट क्रैश देने से बेहतर था। जो मैं पूरा करने की उम्मीद कर रहा था वह था कि उपयोगकर्ता को रिपोर्ट के निष्पादित होने से पहले अपने पैरामीटर को आगे बढ़ाने के लिए मजबूर किया जाए।

बीटीडब्ल्यू, वाक्यविन्यास काम नहीं किया। मैंने इसके बजाए इसका इस्तेमाल किया:

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

विचार के लिए धन्यवाद ठंडा।

+0

हाँ, मैं एसएसआरएस और वीबी आईडीई के बिना अस्थायी हूँ :)। चेकआउट उत्तर अद्यतन। –

+0

और बीटीडब्ल्यू साल की जांच के बारे में क्या है यदि प्रारंभ दिनांक = 12/29/2008 और समाप्ति दिनांक = 01/01/2009? –

1

अक्सर, एसएसआरएस रिपोर्ट में Msgbox फ़ंक्शन का उपयोग करने के साथ परिनियोजन समस्याएं होती हैं। वे हमारी विकास मशीनों पर ठीक काम करते हैं, लेकिन वास्तव में तैनात किए जाने पर काम करना मुश्किल हो सकता है। यहाँ समझा लिंक के एक जोड़े मुद्दे हैं:

From MSDN

From SQLDev

मेरे समाधान एक बहुत साधारण कार्यान्वयन जहां रिपोर्ट बंद कर दिया गया था, लेकिन यह केवल संदेश के लिए प्रदर्शित के साथ एक रिपोर्ट त्रुटि दिखाता है रिपोर्ट दर्शक से उपयोगकर्ता।

  1. एक नया पाठ/स्ट्रिंग पैरामीटर बनाएं
  2. रिक्त मानों की अनुमति दें और बनाने (मैं इसे CheckDateRange कहा जाता है) यह छिपा
  3. उपलब्ध मान = कोई भी
  4. उन्नत = का प्रयोग करें डिफ़ॉल्ट मान
  5. डिफ़ॉल्ट मान = मान निर्दिष्ट करें - मान में, फ़ंक्शन बटन का उपयोग करें और निम्न का उपयोग करें: = CODE.CheckDateParameters (पैरामीटर! BeginDate.Value, पैरामीटर! EndDate.Value) - ध्यान दें कि आप चेक किए गए तिथियों के लिए मेरे पैरामीटर नाम देख सकते हैं BeginDate और EndDate
  6. हैं
  7. अंत में, रिपोर्ट कोड के लिए निम्नलिखित कोड का टुकड़ा दर्ज करें:

    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 
    

कुछ भी नहीं फैंसी, लेकिन पूरा करता है कि तुम क्या जरूरत है।

शुभकामनाएं!

0
>  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() फ़ंक्शन एसएसआरएस पर काम नहीं करेगा। यह एसएसआरएस 2010 पर काम नहीं करता है। मेरा मानना ​​है कि यह एक विंडोज़ फ़ंक्शन है इसलिए इसे किसी दिए गए वेब पेज पर उपयोग नहीं किया जा सकता है।