Jak zacieniować naprzemienne wiersze w raporcie usług SQL Server Reporting Services?
Edycja: poniżej znajduje się kilka dobrych odpowiedzi - od szybkich i prostych po złożone i wyczerpujące . Niestety, mogę wybrać tylko jeden ...
sql-server
reporting-services
formatting
Michael Haren
źródło
źródło
Odpowiedzi:
Przejdź do właściwości BackgroundColor wiersza tabeli i wybierz opcję „Wyrażenie ...”
Użyj tego wyrażenia:
Ta sztuczka może być zastosowana do wielu obszarów raportu.
A w .NET 3.5+ możesz użyć:
Nie szukam przedstawiciela - po prostu zbadałem to pytanie i pomyślałem, że się nim podzielę.
źródło
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
Wygląda na to, że będzie to prawidłowe wyrażenie=IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
. Dzięki za cynk.Korzystanie z IIF (RowNumber ...) może prowadzić do problemów podczas grupowania wierszy, a inną alternatywą jest użycie prostej funkcji VBScript do określenia koloru.
To trochę więcej wysiłku, ale gdy podstawowe rozwiązanie nie wystarczy, jest to fajna alternatywa.
Zasadniczo dodajesz kod do raportu w następujący sposób ...
Następnie w każdej komórce ustaw BackgroundColor w następujący sposób:
Pełne szczegóły znajdują się w tym artykule Wrox
źródło
Efekt szachowy uzyskałem, gdy użyłem rozwiązania Catch22, myślę, że moja matryca ma więcej niż jedną kolumnę w projekcie. to wyrażenie działało dobrze dla mnie:
źródło
Zmieniłem rozwiązanie @ Catch22 Trochę, ponieważ nie podoba mi się pomysł, że muszę wchodzić w każde pole, jeśli zdecyduję, że chcę zmienić jeden z kolorów. Jest to szczególnie ważne w raportach, w których istnieje wiele pól, które wymagałyby zmiany zmiennej koloru.
Zauważyłem, że zmieniłem funkcję z tej, która akceptuje kolory, na taką, która zawiera kolory, które mają być użyte.
Następnie w każdym polu dodaj:
Jest to znacznie bardziej niezawodne niż ręczna zmiana koloru tła każdego pola.
źródło
Zauważyłem jedną rzecz, że żadna z dwóch najlepszych metod nie ma pojęcia, jaki kolor powinien mieć pierwszy wiersz w grupie; grupa zacznie po prostu kolorem przeciwnym niż ostatni wiersz poprzedniej grupy. Chciałem, aby moje grupy zawsze zaczynały się w tym samym kolorze ... pierwszy rząd każdej grupy powinien być zawsze biały, a następny wiersz kolorowy.
Podstawową koncepcją było zresetowanie przełącznika po uruchomieniu każdej grupy, więc dodałem trochę kodu:
Mam teraz trzy różne rodzaje tła komórek:
To działa dla mnie. Jeśli chcesz, aby wiersz grupowania nie był kolorowy lub miał inny kolor, powinno być dość oczywiste, jak to zmienić.
Zapraszam do dodawania komentarzy na temat tego, co można zrobić, aby ulepszyć ten kod: Jestem nowy zarówno w SSRS, jak i VB, więc mocno podejrzewam, że jest dużo miejsca na ulepszenia, ale podstawowa idea wydaje się rozsądna (i była przydatna dla mnie), więc chciałem to wyrzucić tutaj.
źródło
dla nagłówków / stopek grup:
Możesz również użyć tego do „zresetowania” liczby kolorów wierszy w każdej grupie. Chciałem, aby pierwszy wiersz szczegółów w każdej podgrupie zaczynał się od koloru białego, a to rozwiązanie (użyte w wierszu szczegółów) pozwoliło na to:
Zobacz: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx
źródło
Rozwiązanie Michaela Harena działa dobrze dla mnie. Otrzymałem jednak ostrzeżenie, że „Transparent” nie jest prawidłowym kolorem tła podczas podglądu. Znalazłem szybką poprawkę z ustawiania BackgroundColor elementów raportu w usługach SSRS . Nie używaj Niczego zamiast „Przezroczysty”
źródło
Jedynym skutecznym sposobem rozwiązania tego problemu bez używania VB jest „przechowywanie” wartości modulo grupowania wierszy w ramach grupowania wierszy (i poza grupowaniem kolumn) i jawne odwoływanie się do niej w ramach grupowania kolumn. Znalazłem to rozwiązanie pod adresem
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
Ale Ankeet nie najlepiej radzi sobie z wyjaśnianiem, co się dzieje, a jego rozwiązanie zaleca niepotrzebny krok tworzenia grupowania według stałej wartości, więc oto mój proces krok po kroku dla macierzy z jedną grupą wierszy RowGroup1:
Ustaw wartość pola tekstowego RowGroupColor na
=iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
Ustaw właściwość BackgroundColor wszystkich komórek wierszy na
"=ReportItems!RowGroupColor.Value"
Voila! To również rozwiązuje wiele problemów wymienionych w tym wątku:
Byłoby wspaniale, gdyby usługa SSRS ujawniła właściwości poza wartością w polach tekstowych. Możesz po prostu umieścić tego rodzaju obliczenia we właściwości BackgroundColor pól tekstowych grupy wierszy, a następnie odwołać się do niej jako ReportItems! RowGroup.BackgroundColor we wszystkich pozostałych komórkach.
No cóż, możemy marzyć ...
źródło
Mój problem polegał na tym, że chciałem, aby wszystkie kolumny w rzędzie miały to samo tło. Pogrupowałem zarówno według wiersza, jak i według kolumny, a przy dwóch górnych rozwiązaniach tutaj otrzymałem wszystkie wiersze w kolumnie 1 z kolorowym tłem, wszystkie wiersze w kolumnie 2 na białym tle, wszystkie wiersze w kolumnie 3 na kolorowym tle , i tak dalej. To tak, jakby
RowNumber
ibOddRow
(rozwiązania Catch22) zwróciło uwagę na moją grupę kolumn zamiast ignorować to i tylko naprzemiennie z nowym wierszem.Chciałem, aby wszystkie kolumny w wierszu 1 miały białe tło, następnie wszystkie kolumny w wierszu 2 miały kolorowe tło, a wszystkie kolumny w wierszu 3 miały białe tło i tak dalej. Uzyskałem ten efekt, używając wybranej odpowiedzi, ale zamiast przejść
Nothing
doRowNumber
, podałem nazwę mojej grupy kolumn, npPomyślałem, że to może być przydatne dla kogoś innego.
źródło
Myślę, że ta sztuczka nie jest tutaj omawiana. Więc oto jest,
W każdym typie złożonej macierzy, gdy chcesz zmienić kolory komórek, wierszami lub kolumnami, rozwiązaniem roboczym jest:
Jeśli chcesz mieć inny kolor komórek,
To wszystko.
To samo dotyczy alternatywnego wiersza koloru, ale musisz odpowiednio edytować rozwiązanie.
UWAGA: Tutaj czasami trzeba odpowiednio ustawić obramowanie komórek, zwykle znika.
Nie zapomnij również usunąć wartości 1 w raporcie, który pojawił się na zdjęciu podczas tworzenia fałszywej grupy nadrzędnej.
źródło
Jeśli dla całego raportu potrzebujesz naprzemiennego koloru, możesz użyć zestawu danych, do którego jest przypisany Twój Tablix, aby uzyskać numer identyfikacyjny całego raportu w raporcie i użyć tego w funkcji RowNumber ...
źródło
Odpowiedź @ Aditya jest świetna, ale są przypadki, w których formatowanie zostanie wyrzucone, jeśli pierwsza komórka wiersza (w przypadku formatowania tła wiersza) ma brakującą wartość (w złożonych elementach tablix z grupami kolumn / wierszy i brakującymi wartościami).
Rozwiązanie @ Aditya sprytnie wykorzystuje
countDistinct
wynikrunningValue
funkcji do identyfikacji numerów wierszy w grupie elementu tablix (row). Jeśli masz wiersze elementu tablix z brakującą wartością w pierwszej komórce,runningValue
nie zwiększycountDistinct
wyniku i zwróci numer poprzedniego wiersza (a zatem wpłynie na formatowanie tej komórki). Aby to uwzględnić, będziesz musiał dodać dodatkowy termin, aby skompensowaćcountDistinct
wartość. Moim zdaniem było sprawdzenie pierwszej wartości bieżącej w samej grupie wierszy (zobacz wiersz 3 fragmentu poniżej):Mam nadzieję że to pomoże.
źródło
Czy ktoś mógłby wyjaśnić logikę zmiany pozostałych pól na fałsz w poniższym kodzie (z powyższego postu)
Zauważyłem jedną rzecz, że żadna z dwóch najlepszych metod nie ma pojęcia, jaki kolor powinien mieć pierwszy wiersz w grupie; grupa zacznie po prostu kolorem przeciwnym niż ostatni wiersz poprzedniej grupy. Chciałem, aby moje grupy zawsze zaczynały się w tym samym kolorze ... pierwszy rząd każdej grupy powinien być zawsze biały, a następny wiersz kolorowy.
Podstawową koncepcją było zresetowanie przełącznika po uruchomieniu każdej grupy, więc dodałem trochę kodu:
Mam teraz trzy różne rodzaje tła komórek:
To działa dla mnie. Jeśli chcesz, aby wiersz grupowania nie był kolorowy lub miał inny kolor, powinno być dość oczywiste, jak to zmienić.
Zapraszam do dodawania komentarzy na temat tego, co można zrobić, aby ulepszyć ten kod: Jestem nowy zarówno w SSRS, jak i VB, więc mocno podejrzewam, że jest dużo miejsca na ulepszenia, ale podstawowa idea wydaje się rozsądna (i była przydatna dla mnie), więc chciałem to wyrzucić tutaj.
źródło
Wypróbowałem wszystkie te rozwiązania na zgrupowanym tablixie z odstępami między wierszami i żadne nie działało w całym raporcie. Rezultatem były zduplikowane kolorowe wiersze, a inne rozwiązania spowodowały naprzemienne kolumny!
Oto funkcja, którą napisałem, która działała dla mnie przy użyciu liczby kolumn:
Dla tablixa z 7 kolumnami używam tego wyrażenia dla Row (of Cells) Backcolour:
źródło
Ponieważ żadna z powyższych odpowiedzi nie wydawała się działać w mojej macierzy, zamieszczam to tutaj:
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
źródło
W moich danych macierzowych brakowało wartości, więc nie udało mi się uzyskać rozwiązania Ahmada, ale to rozwiązanie działało dla mnie
Podstawowym pomysłem jest utworzenie grupy podrzędnej i pola na najbardziej wewnętrznej grupie zawierającej kolor. Następnie ustaw kolor dla każdej komórki w wierszu na podstawie wartości tego pola.
źródło
Nieznaczna modyfikacja innych odpowiedzi z tego miejsca, które działały dla mnie. Moja grupa ma dwie wartości do zgrupowania, więc mogłem po prostu umieścić je obie w pierwszym argumencie z +, aby uzyskać poprawną zmianę
źródło
Podczas korzystania z obu grup wierszy i kolumn miałem problem z naprzemiennymi kolorami między kolumnami, mimo że był to ten sam wiersz. Rozwiązałem to, używając zmiennej globalnej, która zmienia się tylko wtedy, gdy zmienia się wiersz:
Teraz w pierwszej kolumnie wiersza, który chcesz zmienić, ustaw wyrażenie koloru na:
-
W pozostałych kolumnach ustaw je wszystkie na:
Powinno to spowodować zmianę kolorów dopiero po narysowaniu pierwszej kolumny.
Może to (w sposób nieweryfikowalny) również poprawić wydajność, ponieważ nie ma potrzeby wykonywania obliczeń matematycznych dla każdej kolumny.
źródło