Raport, który ktoś musi uruchamiać ręcznie każdego ranka, po kilku tygodniach przestaje być uruchamiany. Subskrypcja w SQL Server Reporting Services przenosi ten obowiązek na serwer: zestawienie powstaje według harmonogramu i trafia do skrzynki albo na udział sieciowy. Pytanie dotyczy tego, które raporty z magazynu na to zasługują.

Kiedy subskrypcja ma sens

Subskrypcja pasuje do raportów o stałym rytmie i stałym odbiorcy. Kierownik zmiany chce rano zestawienia wydań z poprzedniej doby, a dział zakupów w poniedziałek chce listy przyjęć z całego tygodnia. Raport do analizy ad hoc, w którym filtry zmieniają się przy każdym uruchomieniu, lepiej zostawić do wykonania na żądanie.

RaportOdbiorcaSubskrypcjaUzasadnienie
Dobowe zestawienie wydańkierownik zmianytak, codziennie ranostały rytm i stały odbiorca
Zestawienie dokumentów PZB z tygodniadział zakupówtak, w poniedziałekplik Excel do dalszej analizy bez logowania do systemu
Rozliczenie usług za miesiąckontrahent 3PLtak, po zamknięciu okresujeden szablon, osobne parametry dla każdego klienta
Analiza rotacji z filtramianalityknieparametry zmieniają się przy każdej analizie
Lista kompletacji na zmianęmagazynierniedane zmieniają się co minutę, a lista należy do terminala
Studio WMS.net - zestawienie dokumentów PZB z filtrem daty, kontrahenta i statusu przyjęcia
Zestawienie dokumentów PZB z filtrem daty i kontrahenta - typowy kandydat do cotygodniowej subskrypcji

Jak działa subskrypcja w SSRS

Subskrypcja zapisuje dwie rzeczy: kiedy raport ma powstać i dokąd ma trafić. Do tego dochodzą wartości parametrów, które raport przyjmie przy wykonaniu. Serwer pobiera dane z bazy w chwili uruchomienia harmonogramu, więc odbiorca dostaje stan z tej godziny, a nie z momentu otwarcia wiadomości.

Dostarczanie odbywa się pocztą elektroniczną albo na udział plikowy. Format eksportu wybiera się w samej subskrypcji. Ten sam raport może trafić do kierownika jako PDF, a do księgowości jako plik CSV. Każda kombinacja formatu i odbiorcy to osobna subskrypcja z własnym harmonogramem i własnym wpisem w dzienniku wykonań.

KanałCo otrzymuje odbiorcaKontrola dostępuTypowe zastosowanie
E-mail z załącznikiemplik PDF albo Excelkopia opuszcza serwer, uprawnień nie da się cofnąćzestawienia dla zarządu i kontrahentów
E-mail z odnośnikiemlink do raportu na serwerzeodbiorca potrzebuje uprawnień do raporturaporty z danymi wrażliwymi
Udział plikowyplik w katalogu sieciowymuprawnienia kataloguarchiwum i przekazanie pliku do innego programu

Rozmiar załącznika ma znaczenie. Serwery poczty odrzucają wiadomości powyżej ustalonego limitu, a zestawienie z kilkudziesięcioma tysiącami wierszy w formacie Excel łatwo go przekracza. W takim przypadku subskrypcja z odnośnikiem albo zapis na udział plikowy działa pewniej niż załącznik, a ograniczenie zakresu dat w parametrach skraca raport bez utraty informacji.

Subskrypcja standardowa i sterowana danymi

Subskrypcja standardowa ma stałą listę odbiorców i stałe parametry. Subskrypcja sterowana danymi pobiera odbiorców oraz parametry z zapytania, więc jeden szablon rozliczenia może wygenerować osobny plik dla każdego kontrahenta. Ten wariant jest dostępny w edycjach Standard i Enterprise, które porównuje dokumentacja edycji SQL Server.

Parametry, które trzeba ustawić

Kontrola subskrypcji w bazie serwera raportów

Serwer raportów zapisuje subskrypcje i historię wykonań w swojej bazie, domyślnie o nazwie ReportServer. Administrator może sprawdzić, które subskrypcje zakończyły się błędem, bez otwierania portalu. Poniższe zapytanie jest ilustracyjne i dotyczy domyślnej konfiguracji trybu natywnego.

SELECT c.Path          AS Raport,
       s.DeliveryExtension AS Kanal,
       s.LastRunTime,
       s.LastStatus
FROM ReportServer.dbo.Subscriptions AS s
JOIN ReportServer.dbo.Catalog       AS c ON c.ItemID = s.Report_OID
WHERE s.LastStatus NOT LIKE 'Mail sent%'
  AND s.LastStatus NOT LIKE 'File%'
ORDER BY s.LastRunTime DESC;

Kolumna DeliveryExtension rozróżnia wysyłkę pocztową od zapisu na udział plikowy, a LastStatus zawiera treść ostatniego komunikatu. Szczegóły wykonań, w tym czas pobrania danych i renderowania, zapisuje widok ExecutionLog3 w tej samej bazie. Przy raportach z długim zapytaniem pomaga plan wykonania zapytania.

Reguła: w trybie natywnym harmonogram subskrypcji działa przez zadania SQL Server Agent, a edycja Express go nie zawiera. Obietnica raportu na skrzynce o szóstej rano wymaga więc decyzji o edycji przed wdrożeniem. Ograniczenia tej edycji opisuje strona o SQL Express w programie magazynowym.

Wynik zapytania warto ocenić po stronie odbiorcy, a nie tylko serwera. Subskrypcja, która wysyła pusty plik, bo w danym dniu nie było wydań, uczy odbiorców ignorowania wiadomości. Raport powinien w takim przypadku jasno pokazać komunikat o braku danych, a krytyczne zestawienia mogą mieć osobny temat wiadomości, po którym odbiorca rozpozna błąd wykonania.

Subskrypcja w obiegu magazynowym

Najlepiej sprawdzają się zestawienia powstające z dokumentów magazynowych, czyli przyjęć i wydań. Raport z listą wydań ma sens jako poranny przegląd, bo każde wydanie jest już zamknięte dokumentem, a liczby nie zmienią się po wysłaniu pliku. Proces wydania opisuje artykuł o wydaniu z magazynu, a pozostałe obszary raportowania opisuje obsługa magazynu.

Plik CSV zapisany na udziale może zasilić program księgowy, gdy wymiana danych nie przebiega bezpośrednio. Integrację z ERP opisuje strona o Subiekt nexo PRO z systemem WMS, a wszystkie kanały wymiany danych zestawia artykuł o komunikacji z programem magazynowym.

Kiedy subskrypcja szkodzi

Subskrypcje, których nikt nie czyta, obciążają bazę o każdej porze harmonogramu. Raz na kwartał warto przejrzeć ExecutionLog3 i sprawdzić, czy raporty o typie żądania Subscription mają odbiorców, którzy je otwierają. Zbędną subskrypcję usuwa się w minutę, a zapytanie, które codziennie czyta miliony wierszy, obciąża serwer przez cały rok.

Subskrypcja sterowana danymi dla kontrahentów

W magazynie kontraktowym jeden raport rozliczeniowy trafia do wielu klientów, a każdy powinien widzieć wyłącznie własne dane. Zapytanie dostarczające odbiorców zwraca po jednym wierszu na kontrahenta, a kolumny trafiają do ustawień dostarczania i do parametrów raportu. Poniższy przykład jest ilustracyjny i nie pokazuje struktury bazy produktu.

SELECT k.Email      AS [TO],
       k.KontrahentId AS KontrahentId,
       'PDF'        AS RenderFormat
FROM dbo.Kontrahenci AS k
WHERE k.Aktywny = 1
  AND k.EmailRaportow IS NOT NULL;

W kartotece kontrahenta Studio WMS.net istnieje pole z adresem e-mail do automatycznych powiadomień, co widać na zrzucie poniżej. Taki adres jest naturalnym źródłem odbiorcy dla subskrypcji, bo dane klienta nie są wtedy powielane w ustawieniach serwera raportów.

Studio WMS.net - formularz kontrahenta zakładka inne z godzinami pracy, ubezpieczeniem i e-mail autopowiadomień
Zakładka Inne kontrahenta - godziny pracy, ubezpieczenie, e-mail powiadomień automatycznych i kolor wizualizacji na planie magazynu

Reguła: parametr identyfikujący kontrahenta musi wejść do klauzuli WHERE zapytania raportu, a nie tylko do filtru wyświetlania. Błąd w mapowaniu parametru wysyła klientowi dane innego klienta, a wysłanej wiadomości nie da się cofnąć.

Godziny harmonogramu i obciążenie serwera

Wszystkie subskrypcje ustawione na szóstą rano uruchamiają się jednocześnie i konkurują o to samo źródło danych. Harmonogramy warto rozłożyć w czasie, na przykład co dziesięć minut, oraz odsunąć od okna kopii zapasowej bazy. Raporty o dużym koszcie zapytania przenosi się na godziny, w których terminale w hali pracują najmniej intensywnie.

Przy rezygnacji z subskrypcji pomaga rozmowa z odbiorcą. Jeśli kierownik zmiany otwiera raport wydań dopiero po południu, harmonogram poranny nic nie daje, a wystarczy raport uruchamiany na żądanie z zapisanymi parametrami. Gdy ten sam plik otwiera pięć osób, jedna subskrypcja z udziałem plikowym zastępuje pięć wiadomości z załącznikami.

Wdrożenie i utrzymanie raportowania

SoftwareStudio wdraża i utrzymuje serwery raportów oparte na Microsoft SQL Reporting Services. Zakres obejmuje przygotowanie źródeł danych oraz konfigurację subskrypcji. Po uruchomieniu zespół monitoruje ich wykonanie. System raportowy jest częścią platformy opisanej na stronie Studio WMS.net.

Wcześniejszym etapem jest dobór wskaźników, które mają trafiać do odbiorców. Przykłady prognoz i analiz wspomaganych algorytmami opisuje artykuł o sztucznej inteligencji w logistyce, a ogólny obraz procesów magazynowych daje strona o gospodarce magazynowej.

Pytania i odpowiedzi o subskrypcję raportów

Subskrypcje są funkcją SQL Server Reporting Services i zależą od edycji SQL Server. Subskrypcje sterowane danymi wymagają edycji Standard albo Enterprise, a edycja Express nie obsługuje harmonogramów. Dokładny zakres warto sprawdzić przed zakupem w dokumentacji edycji.

Tak, serwer wykonuje zapytanie w momencie uruchomienia harmonogramu. Odbiorca dostaje stan z tej godziny, nawet jeśli otworzy wiadomość kilka godzin później. Gdy dane muszą być bardziej aktualne, raport uruchamia się na żądanie.

PDF nadaje się do czytania i archiwizacji, bo zachowuje układ strony. Excel jest właściwy dla odbiorcy, który dalej liczy na danych. CSV wybiera się wtedy, gdy plik trafia do importu w innym programie.

Serwer zapisuje komunikat w polu LastStatus subskrypcji i w dzienniku wykonań. Częstą przyczyną są nieaktualne poświadczenia źródła danych albo niedostępny serwer poczty. Administrator znajdzie je jednym zapytaniem do bazy serwera raportów.

Nie, subskrypcję tworzy się dla raportu już opublikowanego na serwerze. Report Builder służy do projektowania samego raportu. Odbiorca niczego nie instaluje i nie loguje się do systemu magazynowego.

Glosariusz pojęć związanych z subskrypcją raportów

Subskrypcja raportu
Zapisane na serwerze raportów zlecenie wykonania raportu według harmonogramu z wysyłką do wskazanych odbiorców.
SSRS
SQL Server Reporting Services, usługa serwerowa do projektowania, wykonywania i dostarczania raportów stronicowanych.
Subskrypcja sterowana danymi
Subskrypcja, w której odbiorców i wartości parametrów pobiera zapytanie, dzięki czemu jeden raport tworzy wiele wersji.
Harmonogram współdzielony
Definicja terminu wykonania używana przez wiele raportów, zmieniana w jednym miejscu.
SQL Server Agent
Usługa SQL Server uruchamiająca zadania według harmonogramu, z której korzystają subskrypcje w trybie natywnym.
Udział plikowy
Katalog sieciowy, do którego serwer raportów zapisuje wyeksportowany plik zamiast wysyłać go pocztą.
Poświadczenia źródła danych
Konto i hasło zapisane na serwerze, którymi raport łączy się z bazą podczas niezależnego od użytkownika wykonania.
ExecutionLog3
Widok w bazie serwera raportów z danymi o każdym wykonaniu raportu: czasie pobrania danych, przetwarzania i renderowania.

Warto przeczytać o systemie WMS i raportowaniu

Prognoza popytu i czas rozładunku w magazynie wysokiego składowania - zadania dla AI
Sztuczna inteligencja w magazynie wysokiego składowania: prognoza popytu, czas rozładunku, trasy dostaw i algorytm genetyczny. Dane i kontrola wyników.
Czytaj artykuł →
Obsługa magazynu dla firm 3PL - zlecenia, rozliczenia i system WMS
Obsługa magazynu na zlecenie klienta: zlecenia ZPZ i ZWZ, rozliczanie usług per kontrahent, rampa i praca terminali. Przykład zapytania T-SQL w Studio WMS.net.
Czytaj artykuł →
Integracja Subiekt nexo PRO z systemem WMS
Studio WMS.net łączy się z Subiekt nexo PRO przez Sferę nexo SDK. Import zleceń ZK, dwukierunkowa synchronizacja stanów i obsługa 100 000 indeksów w SQL Server.
Czytaj artykuł →
Terminal Android w magazynie wysokiego składowania - komunikacja operatora z WMS
Komunikacja z programem magazynowym w magazynie wysokiego składowania: terminal Android przy regale, ERP, EDI i API. Kolejka komunikatów w T-SQL bez duplikatów.
Czytaj artykuł →
Wydanie palet z regałów wysokiego składowania - FIFO, FEFO i kod autoryzacji w Studio WMS.net
Wydanie towaru z magazynu wysokiego składowania: dokument WZ, awizo wydania, kod autoryzacji, algorytmy FIFO i FEFO oraz zapytanie T-SQL. Zobacz Studio WMS.net.
Czytaj artykuł →
Ewidencja zapasów w magazynie wysokiego składowania - raport stanów zerowych i ujemnych
Ewidencja zapasów w magazynie wysokiego składowania: dokumentowanie obrotu, raport stanów zerowych i ujemnych oraz zapytanie T-SQL z funkcją okna w WMS.
Czytaj artykuł →