SSRS 2008 – dzień drugi

Walka trwa. Już sporo udało się uruchomić, ale pojawiają się kolejne ciekawostki do ogarnięcia. Dzień drugi jest tu potraktowany dość dowolnie, bo w rzeczywistości rozciągnął się na kilka. Razem z wujkiem Googlem rozwiązujemy kolejne problemy.

Problem 1. Nie działa wysyłka maili subskrybowanych raportów.

Błąd „Failure sending mail: The transport lost its connection to the server.”

Najprawdopodobniej próba wysłania za dużego załącznika Excela. Przy czym „za duży” może być różnie interpretowane. Znalezione rozwiązanie: „zwiększyć dopuszczalny rozmiar wiadomości na serwerze SMTP”. Pierwsza myśl – raczej tu nie ma zastosowania – w moim przypadku maksymalny rozmiar wiadomości to 25MB, załącznik ma 8MB.

Okazało się, że było blisko, ale trzeba szukać gdzie indziej. Akurat serwer SMTP, przez który wysyłamy pocztę jest tylko przekaźnikiem (relay) do właściwego serwera SMTP. Ustawienia rozmiarów wiadomości były bardzo niskie. Zwiększenie do rozmiaru dozwolonego przez główny serwer SMTP oraz zrestartowanie IISa na serwerze-przekaźniku rozwiązało problem.

Błąd „Failure sending mail: At least one of the From or Sender fields is required, and neither was found. Mail will not be resent.”

Wprowadzono alias (np. nazwę użytkownika domenowego) zamiast adresu e-mail: http://support.microsoft.com/kb/945601/pl. Sprawdź zarówno ustawienia subskrypcji jak i konta wysyłającego maile w Reporting Services Configuration Manager, sekcja E-mail settings.

Błąd „The transport error code was 0x800ccc6d. The server response was 552 4.3.1 Message size exceeds fixed maximum message size”

Rozmiar załącznika typu CSV przekracza dozwolony rozmiar ustawiony na serwerze SMTP. Co ciekawe ten błąd wystąpił tylko dla załącznika CSV – dla pozostałych zgłaszał „transport lost”.

Problem 2. Jak przychodzę do pracy i uruchamiam stronę z raportami, to strasznie długo się wczytuje. Potem już jest dobrze. No, prawie dobrze.

W SSRS istnieje pojęcie czasu recyklingu raportów (domyślnie 720 minut). Jest to związane z ogólnym pojęciem appdomain recycling w .NET, ale nie będę teraz tego zgłębiał. Generalnie objawia się to przez wyczyszczenie z pamięci wszystkich ustawień aplikacji. A po restarcie pierwsze uruchomienie wymaga ponownego ich załadowania, co powoduje dłuższy czas oczekiwania.

Rozwiązanie 1: wydłużyć czas recyklingu oraz automat odpalany w nocy, który za nas będzie udawał pierwszego użytkownika: http://www.pawlowski.cz/2011/07/solving-issue-long-starting-report-ssrs-2008/

Rozwiązanie 2: przygotować prosty raport, którego głównym zadaniem będzie uruchamianie się w krótkich odstępach czasu co pozwoli zapobiec restartowi. Patrz: http://social.msdn.microsoft.com/Forums/is/sqlreportingservices/thread/bbaafd07-2897-4b9a-920a-7dbb03047635

Problem 3. Mam w raporcie parametr, który jest listą rozwijaną wielokrotnego wyboru. Chcę, żeby domyślnie były zaznaczone wszystkie wartości (wybranie „Select All”).

Jako wartość domyślną ustaw te same wartości jakie są dostępne w liście wyboru.

Problem 4. Jak tworzę wykres, to jako wartości na nim od razu mi wrzuca albo SUM(), albo COUNT(). Ja nie chcę żadnego agregatu, tylko żeby pokazał mi to, co daję na osi Y.

Obok pola agregatu nacisnąć strzałkę (trójkąt), żeby pokazała się lista rozwijana. Wybrać Expression. Zamiast wartości agregowanej, np. =Count(Fields!Pole.Value) daj samo =Fields!Pole.Value

Problem 5. Eksport do CSV robi to co powinien, czyli oddziela przecinkami. A ja chcę średniki (jak w Excelu), albo nawet tabulator.

W pliku rsreportserver.config odszukaj sekcję Render. Zawiera ona serię wpisów dotyczących renderowania raportów. Zostawiamy istniejący wpis dotyczący CSV i dodajemy drugi, własny:

<Extension Name="CSV 2" Type="Microsoft.ReportingServices.Rendering.DataRenderer.CsvReport,Microsoft.ReportingServices.DataRendering">
    <OverrideNames>
        <Name Language="en-US">CSV (oddzielany srednikiem)</Name>
    </OverrideNames>
    <Configuration>
        <DeviceInfo>
            <FieldDelimiter>;</FieldDelimiter>
        </DeviceInfo>
    </Configuration>
</Extension>

Po kolei:

  • Extension[@Name] – bo każde musi mieć swoją nazwę
  • Type – taki sam jak dla CSV
  • OverrideNames/Name[@language] – chcemy własny opis rozszerzenia renderującego; w moim przypadku język en-US, bo podajemy język systemu operacyjnego
  • Configuration/DeviceInfo/FieldDelimiter – jaki ma być separator

Więcej na temat własnego rozszerzenia renderującego w BOL: Customizing Rendering Extension Parameters in RSReportServer.Config oraz parametry bezpośrednio dla CSV: CSV Device Information Settings.

W przykładzie nie ma polskich liter. Jeśli chcesz ich użyć pamiętaj, żeby zapisać plik jako UTF-8, inaczej będą krzaki.

SSRS 2008 na W2K8. R2.

Piękny tytuł. Ogólnie chodzi o walkę z konfiguracją i spowodowanie działania SQL Server Reporting Services 2008 (R2) na Windows Server 2008 (również R2). Rozpoznanie bojem – uczymy się usługi i kierujemy się zasadą, że ma najpierw działać, a potem będziemy robić żeby było lepiej. Będzie nadal strzelanie skrótami.

Atak 1. Raport stworzony i działający w BIDS nie chce się osadzić (tak będzie po polsku „deploy”?) na serwerze.

„Nie chce się osadzić” może przyjmować różne znaczenia. U mnie to były:

1) Error „The permissions granted to user ‚…’ are insufficient for performing this operation”.
Czytaj dalej