आप SQL सर्वर रिपोर्टिंग सेवा रिपोर्ट में वैकल्पिक पंक्तियों को कैसे शेड करते हैं?
संपादित करें: नीचे सूचीबद्ध अच्छे उत्तरों का एक गुच्छा है - त्वरित और सरल से जटिल और व्यापक तक । काश, मैं केवल एक चुन सकता ...
आप SQL सर्वर रिपोर्टिंग सेवा रिपोर्ट में वैकल्पिक पंक्तियों को कैसे शेड करते हैं?
संपादित करें: नीचे सूचीबद्ध अच्छे उत्तरों का एक गुच्छा है - त्वरित और सरल से जटिल और व्यापक तक । काश, मैं केवल एक चुन सकता ...
जवाबों:
तालिका पंक्ति के BackgroundColor गुण पर जाएं और "अभिव्यक्ति ..." चुनें
इस अभिव्यक्ति का उपयोग करें:
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
इस ट्रिक को रिपोर्ट के कई क्षेत्रों में लागू किया जा सकता है।
और .NET 3.5+ में आप उपयोग कर सकते हैं:
= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
प्रतिनिधि की तलाश में नहीं - मैंने सिर्फ इस सवाल पर शोध किया और सोचा कि मैं साझा करूंगा।
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
ऐसा लगता है कि सही अभिव्यक्ति होगी =IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
। हालांकि टिप के लिए धन्यवाद।
IIF (RowNumber ...) का उपयोग करके कुछ मुद्दों को जन्म दे सकता है जब पंक्तियों को समूहीकृत किया जा रहा है और एक अन्य विकल्प रंग निर्धारित करने के लिए एक सरल VBScript फ़ंक्शन का उपयोग करना है।
यह थोड़ा अधिक प्रयास है लेकिन जब मूल समाधान पर्याप्त नहीं होता है, तो यह एक अच्छा विकल्प है।
मूल रूप से, आप रिपोर्ट में कोड इस प्रकार जोड़ें ...
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
फिर प्रत्येक सेल पर, बैकग्राउण्डर को निम्नानुसार सेट करें:
=Code.AlternateColor("AliceBlue", "White", True)
जब मुझे कैच 22 के समाधान का उपयोग किया गया, तो मुझे शतरंज का प्रभाव मिला, मुझे लगता है क्योंकि मेरे मैट्रिक्स के डिजाइन में एक से अधिक कॉलम हैं। वह अभिव्यक्ति मेरे लिए ठीक काम करती है:
=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")
मैंने @ कैच 22 के समाधान को बदल दिया है क्योंकि मुझे लगता है कि मैं रंगों में से एक को बदलना चाहता हूं तो मुझे प्रत्येक क्षेत्र में जाने का विचार पसंद नहीं है। यह उन रिपोर्टों में विशेष रूप से महत्वपूर्ण है जहां कई क्षेत्र हैं जिन्हें रंग चर को बदलने की आवश्यकता होगी।
'*************************************************************************
' -- Display alternate color banding (defined below) in detail rows
' -- Call from BackgroundColor property of all detail row textboxes
'*************************************************************************
Function AlternateColor(Byval rowNumber as integer) As String
Dim OddColor As String = "Green"
Dim EvenColor As String = "White"
If rowNumber mod 2 = 0 then
Return EvenColor
Else
Return OddColor
End If
End Function
ध्यान दिया जाता है कि मैंने फ़ंक्शन को एक से बदल दिया है जो उन रंगों को स्वीकार करता है जिनमें रंगों का उपयोग किया जाना है।
फिर प्रत्येक क्षेत्र में जोड़ें:
=Code.AlternateColor(rownumber(nothing))
यह प्रत्येक क्षेत्र की पृष्ठभूमि के रंग में मैन्युअल रूप से रंग बदलने की तुलना में बहुत अधिक मजबूत है।
एक बात जिस पर मैंने गौर किया, वह यह कि शीर्ष दो विधियों में से किसी में भी इस बात की कोई धारणा नहीं है कि समूह में पहली पंक्ति किस रंग की होनी चाहिए; समूह पिछले समूह की अंतिम पंक्ति से विपरीत रंग के साथ शुरू होगा। मैं चाहता था कि मेरे समूह हमेशा एक ही रंग से शुरू हों ... प्रत्येक समूह की पहली पंक्ति हमेशा सफेद होनी चाहिए, और अगली पंक्ति रंगीन।
मूल अवधारणा प्रत्येक समूह के शुरू होने पर टॉगल को रीसेट करने की थी, इसलिए मैंने थोड़ा सा कोड जोड़ा:
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
इसलिए मेरे पास अब तीन अलग-अलग प्रकार के सेल बैकग्राउंड हैं:
यह मेरे लिए काम करता है। यदि आप चाहते हैं कि समूहीकरण पंक्ति गैर-रंगीन हो, या एक अलग रंग हो, तो यह इस बात से बिल्कुल स्पष्ट होना चाहिए कि इसे कैसे बदलना है।
कृपया इस कोड को बेहतर बनाने के लिए क्या किया जा सकता है, इसके बारे में टिप्पणी जोड़ने के लिए स्वतंत्र महसूस करें: मैं SSRS और VB दोनों के लिए बिल्कुल नया हूं, इसलिए मुझे दृढ़ता से संदेह है कि सुधार के लिए बहुत जगह है, लेकिन मूल विचार ध्वनि लगता है (और यह उपयोगी था) मेरे लिए) इसलिए मैं इसे यहां फेंकना चाहता था।
समूह हेडर / पाद के लिए:
=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")
आप प्रत्येक समूह के भीतर पंक्ति रंग गणना को "रीसेट" करने के लिए भी इसका उपयोग कर सकते हैं। मैं चाहता था कि प्रत्येक उप समूह में पहली विस्तार पंक्ति व्हाइट के साथ शुरू हो और यह समाधान (जब विस्तार पंक्ति पर उपयोग किया जाता है) कि होने की अनुमति दी:
=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")
देखें: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx
माइकल हरेन का समाधान मेरे लिए ठीक काम करता है। हालाँकि मुझे यह कहते हुए एक चेतावनी मिली कि पूर्वावलोकन के समय "पारदर्शी" एक वैध बैकग्राउंडर नहीं है। SSRS में रिपोर्ट तत्वों के BackgroundColor सेटिंग से एक त्वरित सुधार मिला । "पारदर्शी" के बजाय कुछ भी उपयोग न करें
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
VB का उपयोग किए बिना इसे हल करने का एकमात्र प्रभावी तरीका पंक्ति समूहन (और स्तंभ समूह के बाहर) के भीतर पंक्ति समूहीकरण modulo मान को "स्टोर" करना है और इसे स्पष्ट रूप से अपने स्तंभ समूह के भीतर संदर्भ दें। मुझे यह समाधान मिला
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
लेकिन एनकेट यह बताने का सबसे अच्छा काम नहीं करता है कि क्या हो रहा है, और उसका समाधान एक निरंतर मूल्य पर एक समूहीकरण बनाने के अनावश्यक कदम की सिफारिश करता है, इसलिए यहां एक पंक्ति समूह RowGroup1 के साथ मैट्रिक्स के लिए चरण-दर-चरण प्रक्रिया है:
RowGroupColor के टेक्स्टबॉक्स का मान सेट करें
=iif(RunningValue(Fields![RowGroupField].Value
,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
अपनी सभी पंक्ति कक्षों की BackgroundColor गुण सेट करें
"=ReportItems!RowGroupColor.Value"
देखा! यह भी इस धागे में वर्णित समस्याओं का एक बहुत हल करती है:
यह बहुत बढ़िया होगा अगर SSRS टेक्स्टबॉक्स पर वैल्यू के अलावा प्रॉपर्टीज को एक्सपोज करेगा। आप पंक्ति समूह टेक्स्टबॉक्स के बैकग्राउंडकोलर प्रॉपर्टी में इस तरह की गणना कर सकते हैं और फिर इसे अन्य सभी कक्षों में ReportItems! RowGroup.BackgroundColor के रूप में संदर्भित कर सकते हैं।
आह, हम सपना देख सकते हैं ...
मेरी समस्या यह थी कि मैं चाहता था कि सभी कॉलम एक ही पृष्ठभूमि के हों। मैंने पंक्ति और स्तंभ दोनों से समूहीकृत किया, और यहां शीर्ष दो समाधानों के साथ मैंने कॉलम 1 में सभी पंक्तियों को रंगीन पृष्ठभूमि के साथ, स्तंभ 2 में सभी पंक्तियों को एक सफेद पृष्ठभूमि के साथ, कॉलम 3 में सभी पंक्तियों को एक रंगीन पृष्ठभूमि के साथ रखा। , और इसी तरह। यह वैसा ही है जैसे RowNumber
और bOddRow
(कैच 22 के सॉल्यूशन) मेरे कॉलम ग्रुप पर ध्यान देने के बजाय उस पर ध्यान न दें और केवल एक नई पंक्ति के साथ बारी-बारी से करें।
मैं जो चाहता था वह पंक्ति 1 के सभी स्तंभों में एक सफेद पृष्ठभूमि के लिए है, फिर पंक्ति 2 के सभी स्तंभों में रंगीन पृष्ठभूमि है, फिर पंक्ति 3 के सभी स्तंभों में एक सफेद पृष्ठभूमि है, और इसी तरह। मैं चयनित जवाब का उपयोग करके इस आशय मिल गया लेकिन गुजर के बजाय Nothing
करने के लिए RowNumber
, मैं अपने स्तंभ समूह, जैसे के नाम से पारित कर दिया
=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")
सोचा कि यह किसी और के लिए उपयोगी हो सकता है।
किसी भी प्रकार के जटिल मैट्रिक्स में, जब आप वैकल्पिक सेल रंग चाहते हैं, या तो पंक्तिवार या कॉलम वार, काम करने वाला समाधान है,
यदि आप चाहते हैं कि तब कोलॉम्न वार कोशिकाओं का एक वैकल्पिक रंग हो,
= IIF (RunningValue (फील्ड्स! [ColumnGroupField] .Value, countDistinct, "FakeParentGroup") MOD 2, "White", "LightGrey")
बस इतना ही।
वैकल्पिक रंग पंक्ति वार के लिए समान, बस आपको तदनुसार समाधान संपादित करना होगा।
नोट: यहां, कभी-कभी आपको अपने अनुसार कोशिकाओं की सीमा निर्धारित करने की आवश्यकता होती है, आमतौर पर यह गायब हो जाता है।
जब आप नकली माता-पिता समूह बनाते हैं तो रिपोर्ट में मान 1 को हटाना न भूलें।
@ आदित्य का जवाब बहुत अच्छा है, लेकिन ऐसे उदाहरण हैं जहां फ़ॉर्मेटिंग को बंद कर दिया जाएगा यदि पंक्ति के पहले सेल (पंक्ति पृष्ठभूमि स्वरूपण के लिए) में एक लापता मान है (स्तंभ / पंक्तियों के समूह के साथ जटिल टैबलिक्स में और लापता मान)।
@ आदित्य का समाधान चतुराई (पंक्ति) समूह के भीतर पंक्ति संख्या की पहचान करने के लिए चतुराई countDistinct
से runningValue
फ़ंक्शन का परिणाम देता है । यदि आपके पास पहले सेल में अनुपलब्ध मान वाली टैबलिक्स पंक्तियाँ हैं, runningValue
तो countDistinct
परिणाम में वृद्धि नहीं होगी और यह पिछली पंक्ति की संख्या (और, इसलिए, उस सेल के प्रारूपण को प्रभावित करेगी)। उस खाते के लिए, आपको countDistinct
मूल्य को ऑफसेट करने के लिए एक अतिरिक्त शब्द जोड़ना होगा । मेरा लक्ष्य पंक्ति समूह में पहले चल रहे मूल्य की जांच करना था (नीचे स्निपेट की पंक्ति 3 देखें):
=iif(
(RunningValue(Fields![RowGroupField].Value, countDistinct, "FakeOrRealImmediateParentGroup")
+ iif(IsNothing(RunningValue(Fields![RowGroupField].Value, First, "GroupForRowGroupField")), 1, 0)
) mod 2, "White", "LightGrey")
उम्मीद है की यह मदद करेगा।
क्या कोई शेष फ़ील्ड को झूठे कोड में बदलने के पीछे के तर्क को समझा सकता है (ऊपर की पोस्ट से)
एक बात जिस पर मैंने गौर किया, वह यह कि शीर्ष दो विधियों में से किसी में भी इस बात की कोई धारणा नहीं है कि समूह में पहली पंक्ति किस रंग की होनी चाहिए; समूह पिछले समूह की अंतिम पंक्ति से विपरीत रंग के साथ शुरू होगा। मैं चाहता था कि मेरे समूह हमेशा एक ही रंग से शुरू हों ... प्रत्येक समूह की पहली पंक्ति हमेशा सफेद होनी चाहिए, और अगली पंक्ति रंगीन।
मूल अवधारणा प्रत्येक समूह के शुरू होने पर टॉगल को रीसेट करने की थी, इसलिए मैंने थोड़ा सा कोड जोड़ा:
Private bOddRow As Boolean
'*************************************************************************
'-- Display green-bar type color banding in detail rows
'-- Call from BackGroundColor property of all detail row textboxes
'-- Set Toggle True for first item, False for others.
'*************************************************************************
'
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
इसलिए मेरे पास अब तीन अलग-अलग प्रकार के सेल बैकग्राउंड हैं:
यह मेरे लिए काम करता है। यदि आप चाहते हैं कि समूहीकरण पंक्ति गैर-रंगीन हो, या एक अलग रंग हो, तो यह इस बात से बिल्कुल स्पष्ट होना चाहिए कि इसे कैसे बदलना है।
कृपया इस कोड को बेहतर बनाने के लिए क्या किया जा सकता है, इसके बारे में टिप्पणी जोड़ने के लिए स्वतंत्र महसूस करें: मैं SSRS और VB दोनों के लिए बिल्कुल नया हूं, इसलिए मुझे दृढ़ता से संदेह है कि सुधार के लिए बहुत जगह है, लेकिन मूल विचार ध्वनि लगता है (और यह उपयोगी था) मेरे लिए) इसलिए मैं इसे यहां फेंकना चाहता था।
मैंने पंक्ति स्थान के साथ समूहीकृत टैबलिक्स पर इन सभी समाधानों की कोशिश की और पूरी रिपोर्ट में कोई भी काम नहीं किया। परिणाम डुप्लिकेट रंगीन पंक्तियों और अन्य समाधानों के परिणामस्वरूप वैकल्पिक कॉलम थे!
यहाँ वह फ़ंक्शन है जो मैंने लिखा है कि एक कॉलम की गणना का उपयोग करके मेरे लिए काम किया:
Private bOddRow As Boolean
Private cellCount as Integer
Function AlternateColorByColumnCount(ByVal OddColor As String, ByVal EvenColor As String, ByVal ColCount As Integer) As String
if cellCount = ColCount Then
bOddRow = Not bOddRow
cellCount = 0
End if
cellCount = cellCount + 1
if bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
7 कॉलम टैलिक्स के लिए मैं रो (सेल के) बैककलर के लिए इस अभिव्यक्ति का उपयोग करता हूं:
=Code.AlternateColorByColumnCount("LightGrey","White", 7)
सिर्फ इसलिए कि ऊपर दिए गए उत्तरों में से कोई भी मेरे मैट्रिक्स में काम नहीं कर रहा था, मैं इसे यहां पोस्ट कर रहा हूं:
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
मेरे मैट्रिक्स डेटा में मान गायब थे, इसलिए मैं काम करने के लिए अहम् का समाधान प्राप्त करने में सक्षम नहीं था, लेकिन इस समाधान ने मेरे लिए काम किया
मूल विचार अपने अंतरतम समूह पर एक बाल समूह और क्षेत्र बनाना है जिसमें रंग शामिल है। फिर उस फ़ील्ड के मान के आधार पर पंक्ति में प्रत्येक सेल के लिए रंग सेट करें।
मेरे लिए काम करने वाले अन्य उत्तरों में से थोड़ा सा संशोधन। मेरे समूह में समूह के लिए दो मान हैं, इसलिए मैं उन्हें सही तरीके से वैकल्पिक रूप से प्राप्त करने के लिए दोनों को पहले आर्ग में डाल सकता था।
= Iif ( RunningValue (Fields!description.Value + Fields!name.Value, CountDistinct, Nothing) Mod 2 = 0,"#e6eed5", "Transparent")
दोनों पंक्ति और स्तंभ समूहों का उपयोग करते समय, मेरे पास एक मुद्दा था जहां रंग कॉलम के बीच वैकल्पिक होगा, भले ही यह एक ही पंक्ति हो। मैंने इसे एक वैश्विक वैरिएबल का उपयोग करके हल किया जो पंक्ति बदलने पर ही वैकल्पिक होता है:
Public Dim BGColor As String = "#ffffff"
Function AlternateColor() As String
If BGColor = "#cccccc" Then
BGColor = "#ffffff"
Return "#cccccc"
Else
BGColor = "#cccccc"
Return "#ffffff"
End If
End Function
अब, पंक्ति के पहले कॉलम में आप वैकल्पिक रूप से रंग अभिव्यक्ति सेट करना चाहते हैं:
= Code.AlternateColor ()
-
शेष कॉलम में, उन सभी को निम्न पर सेट करें:
= Code.BGColor
यह पहला कॉलम तैयार होने के बाद ही रंगों को वैकल्पिक बनाना चाहिए।
यह (असंदिग्ध रूप से) प्रदर्शन में सुधार कर सकता है, भी, क्योंकि इसके लिए प्रत्येक कॉलम के लिए गणित की गणना करने की आवश्यकता नहीं है।