मैं डेटा सेट का उपयोग करके पैरामीटर मान पास करने में विफल रहा हूं, =split(पैरामीटर!Status.Value,",")

पैरामीटर (@status)डिफ़ॉल्ट मान -> सी, पी यहां छवि विवरण दर्ज करें

रिटर्न त्रुटि: क्वेर पैरामीटर '@status' के लिए मान व्यंजक उत्तर त्रुटि जारी रखता है: 'ऑब्जेक्ट ()' प्रकार से 'स्ट्रिंग' टाइप करने के लिए रूपांतरण मान्य नहीं है।

0
Sam Bin Ham 16 अक्टूबर 2017, 15:32
हो सकता है कि आप इस पर गलत तरीके से आ रहे हों। क्या आप दिखा सकते हैं कि आपकी डेटासेट क्वेरी में पैरामीटर का उपयोग कैसे किया जाता है? उदाहरण के लिए क्या यह SELECT * FROM myTable WHERE aField IN ('C','P') जैसा कुछ है? एक बार जब मुझे यह पता चल गया तो मैं आपको एक बल्लेबाज का जवाब दे सकता हूं।
 – 
Alan Schofield
16 अक्टूबर 2017, 18:31
मूल रूप से मेरे पास पैरामीटर ('सी', 'पी', 'ओ') में 3 मान हैं, मुझे एक साथ 'सी' और 'पी' का चयन करने की आवश्यकता है और 'ओ' को अलग से चुना जाएगा। इस मामले में आप क्या सुझाव देते हैं।
 – 
Sam Bin Ham
16 अक्टूबर 2017, 21:14
मुझे अभी भी यह जानने की जरूरत है कि आप अपने डेटासेट क्वेरी में पैरामीटर का उपयोग कैसे करते हैं। क्या आप इसे दिखाने के लिए अपना प्रश्न संपादित कर सकते हैं।
 – 
Alan Schofield
16 अक्टूबर 2017, 22:26
मेरे पैरामीटर के अनुसार, यदि बंद करें (सी, पी) का चयन करें तो क्वेरी का चयन करें * myTable से जहां एक फ़ील्ड इन ('सी', 'पी') अन्यथा जहां फ़ील्ड इन ('ओ')। आशा है कि अब आप स्पष्ट कर देंगे
 – 
Sam Bin Ham
17 अक्टूबर 2017, 11:46

2 जवाब

जैसा कि ऐसा लगता है कि पैरामीटर पहले से ही एक स्ट्रिंग है, इसे सूची में बदलने के लिए आपको जो चाहिए वह एक जॉइन फंक्शन है:

=join(Parameters!Status.Value,",")

एक बार जब आप अल्पविराम से अलग की गई सूची को SQL में पास कर लेते हैं, तो आपको सूची की खोज करने की आवश्यकता हो सकती है जैसा कि यहां चर्चा की गई है: SSRS कॉमा सीमांकित सूची के आधार पर परिणामों का चयन

2
Jayvee 17 अक्टूबर 2017, 13:00

आप इसे वैसे ही कर सकते हैं जैसे आप चाहते हैं लेकिन मैं इसे अलग तरीके से देखूंगा क्योंकि यह देखना आसान है कि क्या हो रहा है, खासकर अगर यह किसी और को बाद में डीबग करने के लिए पास हो जाता है।

इसे करने के दो तरीके हैं। पहला है क्लोज या ओपन के लिए सिंगल वैल्यू में पास करना और फिर डेटासेट में कुछ लॉजिक जोड़ना

DECLARE @s TABLE(status char(10))
IF @states = 0  -- Closed
    BEGIN
        INSERT INTO @s VALUES('c'),('p')
    END
ELSE
    BEGIN
        INSERT INTO @s VALUES('o')
    END

select * from myTable a
    JOIN @s s on a.status = s.status

मुझे एहसास है कि यह अधिक कोड है लेकिन इसका पालन करना आसान है।

यदि यह आपके लिए काम करता है तो अभी पढ़ना बंद करें !!

दूसरा विकल्प (यह मानते हुए कि आप नहीं चाहते कि आपके उपयोगकर्ता व्यक्तिगत रूप से 'सी' या 'पी' का चयन करने में सक्षम हों) यह केवल एसएसआरएस पक्ष को स्थापित करने के लिए थोड़ा और प्रयास है लेकिन एसक्यूएल बहुत आसान है। उत्तर की लंबाई से मत हटो यह वास्तव में बहुत आसान है।

आपकी डेटासेट क्वेरी कुछ इस तरह दिखाई देगी...

select * from myTable a WHERE a.Status in (@status)

अपनी रिपोर्ट डिज़ाइन में @states पैरामीटर उपलब्ध मानों को c, p और o पर अलग-अलग आइटम के रूप में सेट करें और पैरामीटर को बहु-मान बनाएं।

इस बिंदु पर आपको यह परीक्षण करने में सक्षम होना चाहिए कि रिपोर्ट काम करती है और आप 1, 2 या तीनों विकल्पों का चयन कर सकते हैं और प्रासंगिक परिणाम प्राप्त कर सकते हैं, जॉइन स्प्लिट या कुछ और की कोई आवश्यकता नहीं है, यह सिर्फ काम करेगा।

अब, जैसा कि मुझे लगता है कि आप नहीं चाहते कि आपके उपयोगकर्ता इस स्तर पर चयन कर सकें, हमें कुछ बदलाव करने की आवश्यकता है।

पहले dsDefaultStatus नाम का एक नया डेटासेट जोड़ें और क्वेरी को कुछ इस तरह सेट करें

DECLARE @s TABLE(status char(10)) IF @status = 0 -- Closed BEGIN INSERT INTO @s VALUES('c'),('p') END ELSE INSERT INTO @s VALUES('o') END

चुनें * @s . से

आपके पास नया @status पैरामीटर होना चाहिए। उपरोक्त क्वेरी से मेल खाने के लिए इसे दो उपलब्ध लेबल/मान जैसे 'बंद करें' = 0 और 'ओपन' = 1 दें।

अब @states पैरामीटर पर वापस जाएं और डिफ़ॉल्ट मानों को dsDefaultStatus में बदलें, यदि आवश्यक हो तो आप इस पैरामीटर को छुपा सकते हैं।

जैसे ही उपयोगकर्ता पहले पैरामीटर में ओपन/क्लोज़ स्थिति का चयन करता है, इस छिपे हुए पैरामीटर के लिए डिफ़ॉल्ट चयन बदल जाएगा। जब आप रिपोर्ट चलाते हैं तो छिपे हुए पैरामीटर से मान रिपोर्ट में पास हो जाते हैं।

0
Alan Schofield 17 अक्टूबर 2017, 13:45