কোনও এসকিউএল সার্ভার রিপোর্টিং পরিষেবাদির প্রতিবেদনে আপনি কীভাবে বিকল্প সারিগুলি ছায়া করবেন?
সম্পাদনা: ভাল নীচে তালিকাভুক্ত উত্তর একটি গুচ্ছ আছে - থেকে দ্রুত এবং সহজ করার জন্য জটিল এবং ব্যাপক । হায়, আমি কেবল একটি বেছে নিতে পারি ...
কোনও এসকিউএল সার্ভার রিপোর্টিং পরিষেবাদির প্রতিবেদনে আপনি কীভাবে বিকল্প সারিগুলি ছায়া করবেন?
সম্পাদনা: ভাল নীচে তালিকাভুক্ত উত্তর একটি গুচ্ছ আছে - থেকে দ্রুত এবং সহজ করার জন্য জটিল এবং ব্যাপক । হায়, আমি কেবল একটি বেছে নিতে পারি ...
উত্তর:
টেবিল সারির ব্যাকগ্রাউন্ড কালার সম্পত্তিটিতে যান এবং "এক্সপ্রেশন ..." চয়ন করুন
এই অভিব্যক্তিটি ব্যবহার করুন:
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
এই কৌশলটি প্রতিবেদনের অনেক ক্ষেত্রে প্রয়োগ করা যেতে পারে।
এবং নেট নেট 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)
। যদিও টিপটির জন্য ধন্যবাদ।
আইআইএফ (রওনম্বার ...) ব্যবহারের ফলে সারিগুলি গোষ্ঠীকরণের সময় কিছু সমস্যা দেখা দিতে পারে এবং অন্য বিকল্পটি রঙ নির্ধারণ করার জন্য একটি সাধারণ ভিবিএস স্ক্রিপ্ট ফাংশন ব্যবহার করা হয়।
এটি কিছুটা বেশি প্রচেষ্টা কিন্তু যখন মৌলিক সমাধানটি যথেষ্ট হয় না, তখন এটি একটি দুর্দান্ত বিকল্প।
মূলত, আপনি নীচে রিপোর্টে কোড যুক্ত করুন ...
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)
সম্পূর্ণ বিবরণ এই Wrox নিবন্ধ হয়
আমি যখন ক্যাচ 22 এর সমাধানটি ব্যবহার করলাম তখন আমি দাবা প্রভাবটি পেয়েছিলাম, আমি মনে করি কারণ আমার ম্যাট্রিক্সের নকশায় একাধিক কলাম রয়েছে। এই অভিব্যক্তিটি আমার পক্ষে ভাল কাজ করেছে:
=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")
আমি @ Catch22 এর সমাধানটি কিছুটা পরিবর্তন করেছি কারণ আমি যদি সিদ্ধান্ত নিই যে আমি রঙগুলির মধ্যে একটি পরিবর্তন করতে চাই তবে প্রতিটি ক্ষেত্রে যেতে হবে এমন ধারণাটি আমি পছন্দ করি না। এটি এমন প্রতিবেদনে বিশেষত গুরুত্বপূর্ণ যেখানে রঙগুলি পরিবর্তনশীল হওয়া দরকার এমন অনেকগুলি ক্ষেত্র।
'*************************************************************************
' -- 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))
এটি প্রতিটি ক্ষেত্রের পটভূমির রঙের ম্যানুয়ালি রঙ পরিবর্তন করার চেয়ে অনেক বেশি দৃust়।
একটি জিনিস আমি লক্ষ্য করেছি যে শীর্ষ দুটি পদ্ধতির কোনওটিরই ধারণা নেই যে প্রথম সারিতে কোন গ্রুপের রঙ হওয়া উচিত; গ্রুপটি কেবল পূর্ববর্তী দলের শেষ লাইন থেকে বিপরীত রঙের সাথে শুরু করবে। আমি চাইছিলাম আমার গোষ্ঠীগুলি সর্বদা একই বর্ণের সাথে শুরু হয় ... প্রতিটি গোষ্ঠীর প্রথম সারিটি সর্বদা সাদা এবং পরবর্তী সারির রঙিন হওয়া উচিত।
মূল ধারণাটি ছিল প্রতিটি গ্রুপ শুরু হওয়ার সাথে সাথে টগলটি পুনরায় সেট করা, সুতরাং আমি কিছুটা কোড যুক্ত করেছি:
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
সুতরাং আমার কাছে এখন তিন ধরণের সেল ব্যাকগ্রাউন্ড রয়েছে:
এটি আমার পক্ষে কাজ করে। আপনি যদি গ্রুপিং সারিটি অ রঙিন বা অন্যরকম রঙের করতে চান তবে এটি কীভাবে এটি পরিবর্তন করা যায় তা এ থেকে মোটামুটি স্পষ্ট হওয়া উচিত।
এই কোডটি উন্নত করার জন্য কী করা যেতে পারে সে সম্পর্কে দয়া করে বিনা দ্বিধায় মন্তব্য করুন: আমি এসএসআরএস এবং ভিবি উভয়ের জন্যই একেবারে নতুন, তাই আমি দৃ strongly়ভাবে সন্দেহ করি যে উন্নতির জন্য প্রচুর জায়গা রয়েছে, তবে প্রাথমিক ধারণাটি সাউন্ড বলে মনে হচ্ছে (এবং এটি কার্যকর ছিল) আমার জন্য) তাই আমি এটিকে এখানে ফেলে দিতে চাই।
গ্রুপ শিরোলেখ / পাদচরণের জন্য:
=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
মাইকেল হরেনের সমাধানটি আমার পক্ষে ভাল কাজ করে। তবে আমি একটি সতর্কতা পেয়েছিলাম যে প্রাকদর্শন করার সময় "স্বচ্ছ" বৈধ ব্যাকগ্রাউন্ড কালার নয়। এসএসআরএসে প্রতিবেদনের উপাদানগুলির ব্যাকগ্রাউন্ড কালার সেট করা থেকে একটি দ্রুত সমাধান পাওয়া গেছে । "স্বচ্ছ" এর পরিবর্তে কিছুই ব্যবহার করবেন না
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
ভিবি ব্যবহার না করে এটি সমাধানের একমাত্র কার্যকর উপায় হ'ল সারি গ্রুপিংয়ের (এবং কলামের গোষ্ঠীকরণের বাইরে) সারি গোষ্ঠীকরণের মডুলো মান "সঞ্চয়" করা এবং এটি আপনার কলামের গোষ্ঠীকরণের মধ্যে স্পষ্টভাবে উল্লেখ করা। আমি এই সমাধানটি খুঁজে পেয়েছি
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
তবে অঙ্কিত কী হচ্ছে তা ব্যাখ্যা করার সর্বোত্তম কাজটি করে না এবং তার সমাধানটি একটি ধ্রুবক মানের উপর একটি দলবদ্ধকরণ তৈরি করার অপ্রয়োজনীয় পদক্ষেপের পরামর্শ দেয়, সুতরাং এখানে একটি একক সারির গোষ্ঠী রো গ্রুপের সাথে ম্যাট্রিক্সের জন্য আমার ধাপে ধাপে প্রক্রিয়াটি দেওয়া হয়েছে:
রোগ্রুপ কলারের পাঠ্যবাক্সের মান এতে সেট করুন
=iif(RunningValue(Fields![RowGroupField].Value
,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
আপনার সমস্ত সারি কোষের পটভূমির রঙের বৈশিষ্ট্য এতে সেট করুন
"=ReportItems!RowGroupColor.Value"
ভাল খবর! এটি এই থ্রেডে উল্লিখিত প্রচুর সমস্যাও সমাধান করে:
এসএসআরএস যদি পাঠ্য বাক্সগুলিতে মান ছাড়াও বৈশিষ্ট্যগুলি প্রকাশ করে তবে এটি দুর্দান্ত। আপনি সারি গ্রুপের পাঠ্যবাক্সগুলির একটি পটভূমি রঙের সম্পত্তিতে এই ধরণের গণনাটি স্টাফ করতে পারেন এবং তারপরে এটিকে অন্যান্য প্রতিবেদনের মধ্যে রিপোর্টআইটেম হিসাবে চিহ্নিত করুন!
আহ্, আমরা স্বপ্ন দেখতে পারি ...
আমার সমস্যাটি হ'ল আমি চেয়েছিলাম যে সারিবদ্ধভাবে সমস্ত কলাম একই পটভূমি হয়। আমি সারি এবং কলাম দ্বারা উভয়কেই দলবদ্ধ করেছিলাম এবং শীর্ষস্থানীয় দুটি সমাধানের সাথে আমি এখানে রঙিন ব্যাকগ্রাউন্ড সহ 1 কলামে সমস্ত সারি পেয়েছি , কলাম 2-এ সমস্ত সারি একটি সাদা ব্যাকগ্রাউন্ড সহ, 3 টি কলামের সমস্ত সারি রঙিন ব্যাকগ্রাউন্ড সহ পেয়েছি , ইত্যাদি। এটি যেমন RowNumber
এবং bOddRow
(ক্যাচ 22 এর সমাধান) আমার কলামের গোষ্ঠীতে সেটিকে উপেক্ষা করার পরিবর্তে এবং কেবল একটি নতুন সারি দিয়ে বিকল্প পরিবর্তনের দিকে মনোযোগ দেয়।
আমি যা চেয়েছিলাম তা হল সারি 1 এর সমস্ত কলামগুলির সাদা পটভূমি, তারপরে সারি 2 এর সমস্ত কলামের রঙিন পটভূমি থাকতে হবে, তারপরে 3 সারিতে থাকা সমস্ত কলামগুলিতে একটি সাদা ব্যাকগ্রাউন্ড থাকবে and নির্বাচিত উত্তরটি ব্যবহার করে আমি এই প্রভাবটি পেয়েছি তবে পাস Nothing
করার পরিবর্তে RowNumber
আমি আমার কলামের গোষ্ঠীর নামটি পাস করেছি, যেমন
=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")
ভেবেছিল এটি অন্য কারও পক্ষে উপকারী হতে পারে।
যেকোন ধরণের জটিল ম্যাট্রিক্সে, আপনি যখন সারি ওয়াইজ বা কলাম অনুযায়ী বিকল্প কক্ষের রঙ চান, তখন কার্যক্ষম সমাধানটি হয়,
যদি আপনি কোলুমান অনুযায়ী কোষগুলির বিকল্প রঙ চান তবে,
= IIF (রানিংভ্যালু (ক্ষেত্রসমূহ! [কলামগ্রুপফিল্ড]। মূল্য
এখানেই শেষ.
বিকল্প রঙের সারি অনুসারে একই, কেবল আপনাকে সেই অনুযায়ী সমাধান সম্পাদনা করতে হবে।
দ্রষ্টব্য: এখানে, কখনও কখনও আপনাকে সে অনুযায়ী কোষগুলির সীমানা নির্ধারণ করতে হবে, সাধারণত এটি অদৃশ্য হয়ে যায়।
এছাড়াও আপনি ভুয়া অভিভাবক গোষ্ঠী তৈরি করার সময় পিকের মধ্যে আসা প্রতিবেদনে মান 1 মুছে ফেলতে ভুলবেন না।
যদি পুরো প্রতিবেদনের জন্য আপনার একটি বিকল্প রঙের প্রয়োজন হয় তবে আপনি যে ট্যাব্লিক্সের প্রতিবেদনের উপরে একটি রিপোর্ট-বিস্তৃত পরিচয় রনবার্টের জন্য আবদ্ধ তা ডেটাসেটটি ব্যবহার করতে পারেন এবং এটি রোএনবার ফাংশনে ব্যবহার করতে পারেন ...
=IIf(RowNumber("DataSet1") Mod 2 = 1, "White","Blue")
@ আদিত্যের উত্তর দুর্দান্ত, তবে উদাহরণ রয়েছে যেখানে সারিটির প্রথম কক্ষে (সারি পটভূমির বিন্যাসের জন্য) অনুপস্থিত মান (কলাম / সারি গোষ্ঠী এবং অনুপস্থিত মান সহ জটিল ট্যাবিলিক্সে) থাকে না তবে ফর্ম্যাটিং বন্ধ হয়ে যায়।
@ আদিত্যের সমাধানটি একটি টব্লিক্স (সারি) গোষ্ঠীর মধ্যে সারি সংখ্যা সনাক্ত করতে চতুরতার 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
সুতরাং আমার কাছে এখন তিন ধরণের সেল ব্যাকগ্রাউন্ড রয়েছে:
এটি আমার পক্ষে কাজ করে। আপনি যদি গ্রুপিং সারিটি অ রঙিন বা অন্যরকম রঙের করতে চান তবে এটি কীভাবে এটি পরিবর্তন করা যায় তা এ থেকে মোটামুটি স্পষ্ট হওয়া উচিত।
এই কোডটি উন্নত করার জন্য কী করা যেতে পারে সে সম্পর্কে দয়া করে বিনা দ্বিধায় মন্তব্য করুন: আমি এসএসআরএস এবং ভিবি উভয়ের জন্যই একেবারে নতুন, তাই আমি দৃ strongly়ভাবে সন্দেহ করি যে উন্নতির জন্য প্রচুর জায়গা রয়েছে, তবে প্রাথমিক ধারণাটি সাউন্ড বলে মনে হচ্ছে (এবং এটি কার্যকর ছিল) আমার জন্য) তাই আমি এটিকে এখানে ফেলে দিতে চাই।
আমি এই সমস্ত সমাধান সারি স্পেস সহ একটি গ্রুপযুক্ত তাবলিক্সে চেষ্টা করেছিলাম এবং পুরো প্রতিবেদনটিতে কোনওটিই কাজ করে না। ফলাফলটি হ'ল রঙিন সারিগুলির অনুলিপি এবং অন্যান্য সমাধানের ফলে বিকল্প কলামগুলির ফলাফল হয়েছিল!
আমি এখানে ফাংশনটি লিখেছি যা একটি কলাম গণনা ব্যবহার করে আমার জন্য কাজ করেছে:
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
এটি প্রথম কলামটি আঁকার পরে রঙগুলিকে বিকল্প আকারে তৈরি করা উচিত।
এটি (অবিশ্বাস্যভাবে) কর্মক্ষমতাও উন্নত করতে পারে, যেহেতু প্রতিটি কলামের জন্য এটি গণিতের গণনা করার দরকার নেই।