Wskaźnik w raporcie magazynowym jest wart tyle, ile jego definicja. Czas kompletacji liczony od wydania zadania do skanu daje inny wynik niż czas liczony od pierwszego kroku operatora. SQL Server Reporting Services pozwala zapisać definicję w zapytaniu raz i uruchamiać ją z tego samego źródła każdemu odbiorcy.
Spis treści
- Dane magazynowe jako źródło raportów
- Wskaźniki w raportach magazynowych
- Zapytanie dla raportu produktywności
- Koszty usług magazynowych w raporcie
- Wykonanie raportu na serwerze
- Raporty ad hoc dla pracowników merytorycznych
- Raportowanie w ofercie SoftwareStudio
- Pytania i odpowiedzi o raportowanie SQL Report Server
- Glosariusz pojęć związanych z raportowaniem w magazynie
Dane magazynowe jako źródło raportów
Każda operacja w Studio WMS.net zapisuje się w bazie z czasem wykonania i lokalizacją. Zapis zawiera też operatora. Raport nie tworzy tych danych. Odczytuje je i grupuje. Z jednej historii ruchów palet powstają zestawienia stanów oraz produktywności zmian. Od zapytania zależy, czy wynikiem jest obłożenie ramp, czy lista palet do przesunięcia.
Zapytania raportowe agregują duże zakresy wierszy, więc mogą kolidować z zapisami z terminali. Jeśli raport czyta dane na poziomie READ COMMITTED bez wersjonowania wierszy, ciężkie zestawienie zakłada blokady współdzielone i opóźnia zapisy. Poziom SNAPSHOT albo opcja READ_COMMITTED_SNAPSHOT w bazie pozwala czytać wersję spójną bez czekania na blokady, a kosztem jest większe użycie bazy tymczasowej. Poziomy opisuje dokumentacja SET TRANSACTION ISOLATION LEVEL.
Reguła: definicję wskaźnika zapisuje się w zapytaniu i opisuje w nagłówku raportu. Dwa raporty produktywności z różnym początkiem odliczania czasu prowadzą do sporów, którego z nich użyć przy ocenie zmiany.
Przy dużym obciążeniu zapisami raporty można kierować do osobnej kopii bazy tylko do odczytu. SQL Server ma kilka mechanizmów replikacji i kopii czytelnych, a wybór zależy od edycji i wymagań dotyczących aktualności danych. Raport o stałych parametrach, na przykład zestawienie za wczorajszy dzień, można też zbuforować na serwerze raportów i otwierać z pamięci podręcznej.
Wskaźniki w raportach magazynowych
Raporty obsługują codzienne decyzje kierownika magazynu, więc ich zawartość wynika z pytań zadawanych na odprawie. Poniższa tabela zestawia wskaźniki najczęściej wymagane od raportu kompletacji i obłożenia.
| Wskaźnik | Co mierzy | Dane źródłowe | Rytm odczytu |
|---|---|---|---|
| Średni czas kompletacji zlecenia | tempo realizacji zamówień | czas zadania i skan zakończenia | codziennie |
| Linie na godzinę | produktywność operatora | skany pobrań z godziną | po każdej zmianie |
| Dokładność pickingu | odsetek pozycji bez błędu | korekty i reklamacje | co tydzień |
| Zapełnienie stref | procent pustych lokalizacji | mapa lokalizacji | co tydzień |
| Rotacja grup produktowych | towary wolno rotujące | wydania z ostatnich miesięcy | co miesiąc |
Rotację i zaleganie omawia strona o rotacji i zaleganiu towarów. Osobną grupę stanowią raporty kosztowe, które korzystają z cenników usług. Pokazuje to widok rozliczania kosztów poniżej.
Zapytanie dla raportu produktywności
Raport produktywności zlicza pobrania w przedziale godzinowym i porównuje wynik operatora ze średnią całej zmiany. Przykład jest ilustracyjny. Nazwy tabel i kolumn nie pochodzą ze schematu produktu. Klauzula OVER pozwala policzyć średnią bez grupowania i bez podzapytania.
WITH godziny AS (
SELECT OperatorId,
CAST(DataPobrania AS date) AS Dzien,
DATEPART(HOUR, DataPobrania) AS Godzina,
COUNT(*) AS Linie
FROM dbo.PobraniaLinii
WHERE DataPobrania >= @DataOd
AND DataPobrania < DATEADD(DAY, 1, @DataDo)
GROUP BY OperatorId, CAST(DataPobrania AS date), DATEPART(HOUR, DataPobrania)
)
SELECT OperatorId, Dzien, Godzina, Linie,
AVG(Linie * 1.0) OVER (PARTITION BY Dzien, Godzina) AS SredniaGodziny
FROM godziny
ORDER BY Dzien, Godzina, Linie DESC;
Kolumna SredniaGodziny trafia do wykresu jako druga seria, więc odchylenie operatora od zmiany widać bez dodatkowych obliczeń w raporcie. Składnię funkcji okna opisuje dokumentacja klauzuli OVER.
Indeks pod zapytanie raportowe
Filtr po zakresie dat jest szybki, gdy kolumna DataPobrania ma indeks, a kolumna OperatorId znajduje się w jego kolumnach dołączonych. Bez niego plan wykonania pokazuje przeszukiwanie całej tabeli pobrań. Taki raport przy tabeli z kilkoma milionami wierszy zaczyna być odczuwalny dla użytkownika, więc indeks wprowadza się przy projekcie raportu, a nie po skargach.
Wynik zapytania ma po jednym wierszu na operatora i godzinę, co daje wykresowi gotowe dane. Wartość SredniaGodziny jest identyczna dla każdego operatora w danym przedziale. Rozrzut wokół niej pokazuje więc, kto pracuje szybciej od zmiany, a kto wolniej. Gdy w godzinie jest mało pobrań, na przykład w czasie przerwy, średnia nie jest reprezentatywna. Raport powinien ukrywać takie przedziały.
Koszty usług magazynowych w raporcie
Magazyn kontraktowy rozlicza klientów za przyjęcie i wydanie jednostki oraz za dobę składowania. Osobną pozycją jest obsługa specjalna. Widok rozliczania kosztów w sekcji Magazyn zestawia okresy rozliczeniowe z kontrahentami i wolumenami operacji. Ostatnia kolumna zawiera kwoty należności. Wynik można wyeksportować do arkusza kalkulacyjnego albo przekazać do ERP, gdzie powstaje faktura.
| Pozycja cennika | Jednostka rozliczenia | Skąd pochodzi ilość |
|---|---|---|
| Przyjęcie | paleta albo sztuka | dokumenty przyjęcia w okresie |
| Wydanie | paleta albo linia zamówienia | dokumenty wydania w okresie |
| Składowanie | doba na paletę | stan lokalizacji z każdego dnia |
| Obsługa specjalna | zlecenie | zadania oznaczone w systemie |
Najtrudniejsza jest pozycja składowania, bo wymaga stanu z każdego dnia okresu, a nie samej sumy dokumentów. Zapytanie liczące dobę po dobie opiera się zwykle na tabeli dat i złączeniu z historią ruchów. Rozliczenie warto sprawdzić na jednym kliencie ręcznie, zanim zostanie uruchomione dla wszystkich.
Wykonanie raportu na serwerze
Serwer raportów odbiera żądanie z przeglądarki, pobiera dane z bazy i dopiero potem renderuje wynik do wybranego formatu. Przy dużych bazach to zapytanie decyduje o czasie wykonania, a nie sama prezentacja. Wynik można wyeksportować do Excel albo PDF. Plik trafia wtedy do osoby, która nie loguje się do systemu magazynowego.
Co użytkownik robi z raportem
- Filtruje. Parametry zawężają zestawienie do wybranego dnia albo kontrahenta jeszcze przed pobraniem danych.
- Drąży. Wiersz sumy prowadzi do raportu szczegółowego, w którym widać pojedyncze dokumenty.
- Eksportuje. Plik Excel służy do dalszej analizy, a PDF do archiwizacji lub przekazania odbiorcy spoza firmy.
- Zamawia wysyłkę. Harmonogram wysyła raport pocztą w stałych porach bez udziału użytkownika.
Wysyłkę według harmonogramu opisuje artykuł o subskrypcji raportów, a projektowanie wzorów dokumentów i etykiet opisuje strona o Microsoft Report Builder. Architekturę serwera i uprawnienia omawia temat serwera raportów. Dokumentacja Microsoft opisuje także raporty stronicowane SSRS.
Obłożenie ramp i trasy kompletacji
Raporty obłożenia ramp pokazują, w których oknach czasowych pojazdy czekają na przydział bramy. Dane pochodzą z awizacji dostaw, więc zestawienie można policzyć dla każdej doby i porównać z liczbą palet przyjętych. Proces opisuje strona o awizacji dostaw.
Raport tras kompletacji wskazuje listy, na których operator wracał do tej samej alejki. Taka lista jest sygnałem, że lokalizacje towarów szybko rotujących leżą zbyt daleko od strefy pakowania. Kolejność pobrań opisuje strona o komisjonowaniu, a zmiany rozmieszczenia wymagają ponownej klasyfikacji ABC.
Raporty ad hoc dla pracowników merytorycznych
Nie każde pytanie da się przewidzieć w gotowym raporcie. Pracownik działu zakupów albo sprzedaży potrzebuje własnego zestawienia, ale nie zna języka zapytań. Report Builder daje mu szablon układu i listę pól, a zapytanie generuje się z wyboru elementów.
Taki raport po publikacji zachowuje się jak każdy inny na serwerze. Wykorzystuje te same metody przeglądania i dostarczania oraz te same zabezpieczenia. Użytkownik widzi tylko dane, do których ma uprawnienia, a zmiana raportu nie wymaga udziału administratora bazy.
Aktualność danych zależy od sposobu uruchomienia. Raport otwierany na żądanie pokazuje stan z chwili zapytania, a raport z pamięci podręcznej stan z ostatniego odświeżenia. Dlatego w nagłówku raportu warto umieścić datę i godzinę wykonania, bo kierownik oceniający wynik zmiany musi wiedzieć, o której godzinie zrobiono zestawienie.
- Raport zaprojektowany. Zapytanie optymalizuje programista pod stały zakres danych, a odbiorca zmienia tylko parametry.
- Raport ad hoc. Użytkownik zestawia pola samodzielnie, więc zapytanie nie jest dostrojone i sprawdza się przy mniejszych zakresach danych.
Raportowanie w ofercie SoftwareStudio
SoftwareStudio dostarcza raportowanie jako część platformy magazynowej i wdraża je razem z systemem. Zestawienia pracują na tych samych danych co aplikacja magazynowa. Rodzaje systemów magazynowych opisuje strona o systemach klasy WMS.
Ogólny obraz systemu daje artykuł o systemie WMS, a funkcje programu dla firm logistycznych zestawia strona o oprogramowaniu WMS. Terminale z Androidem, na których powstają skany zasilające raporty, opisuje strona WMS na Androida, a zarządzanie całym obiektem omawia zarządzanie magazynem.
Pytania i odpowiedzi o raportowanie SQL Report Server
Może obciążać, jeśli zapytanie czyta duże zakresy wierszy bez indeksu. Pomaga indeks na kolumnie daty, odczyt w poziomie SNAPSHOT oraz uruchamianie najcięższych zestawień poza godzinami szczytu. Obciążenie warto sprawdzić w dzienniku wykonań serwera raportów.
Z zapytania zbioru danych i wyrażeń w raporcie. Dlatego definicja, na przykład początek odliczania czasu kompletacji, powinna być zapisana w zapytaniu i opisana w nagłówku raportu. Zmiana definicji wymaga zmiany raportu, a nie zmiany aplikacji.
Tak. Serwer raportów eksportuje wynik do Excel, Word i PDF. Plik Excel nadaje się do dalszej analizy, a PDF do przekazania odbiorcy, który nie ma konta w systemie magazynowym.
Raport ad hoc użytkownik składa sam z gotowych pól w Report Builder, bez pisania zapytania. Raport zaprojektowany przygotowuje programista albo wdrożeniowiec dla stałej potrzeby, z zoptymalizowanym zapytaniem i parametrami. Oba działają na tym samym serwerze i podlegają tym samym uprawnieniom.
Najczęściej przyczyną jest zapytanie bez indeksu na kolumnie filtra albo filtr zastosowany po pobraniu danych. Plan wykonania pokazuje, czy silnik przeszukuje całą tabelę. Poprawa polega zwykle na przeniesieniu filtra do klauzuli WHERE i dodaniu indeksu.
Glosariusz pojęć związanych z raportowaniem w magazynie
- SSRS
- SQL Server Reporting Services, usługa serwerowa do tworzenia, wykonywania i dostarczania raportów stronicowanych.
- Zbiór danych
- Zapytanie i lista pól, z których raport czerpie dane do tabel i wykresów.
- KPI
- Mierzalny wskaźnik efektywności procesu, na przykład liczba linii pobranych na godzinę przez operatora.
- Poziom SNAPSHOT
- Poziom izolacji transakcji, w którym zapytanie czyta spójną wersję danych bez blokad współdzielonych.
- Funkcja okna
- Funkcja T-SQL z klauzulą OVER, która liczy wynik na zbiorze wierszy bez grupowania.
- Indeks dołączony
- Indeks z dodatkowymi kolumnami w liściach, dzięki któremu zapytanie nie sięga do tabeli bazowej.
- Raport ad hoc
- Raport zestawiany przez użytkownika z gotowych pól na doraźną potrzebę, bez udziału programisty.
- Drążenie danych
- Przejście z wiersza sumy do raportu szczegółowego z pojedynczymi dokumentami.