| Termin | Definicja |
|---|---|
| raporty kwartalne | Raporty kwartalne to zestawienia podsumowujące wyniki w cyklu trzymiesięcznym. Jak system liczy kwartałPodział roku na cztery trzymiesięczne okresy wygląda prosto, dopóki nie trzeba go zaprogramować. W SQL Serverze numer kwartału dla daty zwraca DATEPART(quarter, data), a początek bieżącego kwartału wylicza się przez DATEADD z użyciem DATEDIFF względem daty bazowej. Kłopot pojawia się przy rok obrotowym niepokrywającym się z kalendarzowym — wtedy żadna wbudowana funkcja nie pomoże i konieczna jest tabela kalendarza z kolumnami definiującymi własne okresy sprawozdawcze. Taka tabela jest zresztą standardem w każdym sensownym raportowaniu, bo pozwala jednym złączeniem obsłużyć dni robocze, święta i przesunięte okresy. W systemach handlowych, które wdrażamy, zestawienia kwartalne wynikają zwykle z rejestrów sprzedaży i zakupu oraz z obowiązków podatkowych — deklaracje rozliczane co trzy miesiące i pliki kontrolne generowane z tej samej bazy. Zestawienie trzymiesięczne kontra miesięczne i roczneKwartał jest kompromisem: wygładza sezonowość pojedynczego miesiąca, a jednocześnie pozwala zareagować, zanim rok się zamknie. Technicznie różnica jest jednak istotna dla wydajności. Raport miesięczny czyta niewielki wycinek tabeli i mieści się w indeksie, natomiast kwartalny na tabeli dokumentów liczącej miliony wierszy potrafi wywołać skanowanie całości, jeśli warunek daty jest opakowany w funkcję. Zapis z YEAR(data) w klauzuli WHERE uniemożliwia użycie indeksu; ten sam warunek zapisany jako przedział między dwiema datami działa wielokrotnie szybciej. Przy porównaniach rok do roku pomagają funkcje okna, które liczą wartość poprzedniego okresu bez powtórnego przechodzenia po danych. Dlaczego liczby nie zgadzają się między działamiKlasyk pierwszy: raport księgowy liczy według daty wystawienia dokumentu, a handlowy według daty sprzedaży lub wydania z magazynu. Kwartał zamyka się w środku tego rozjazdu i sumy nigdy się nie spotkają. Klasyk drugi: dokumenty korygujące wystawione w kolejnym okresie, które zmieniają wynik już zamkniętego kwartału — raport wygenerowany dwa razy daje dwie różne liczby i nikt nie wie, która jest właściwa. Klasyk trzeci: zestawienie liczone na kopii bazy sprzed nocnej synchronizacji. Do tego dochodzi kwestia strefy czasowej i typu danych — kolumna typu datetime z godziną sprawia, że warunek do końca ostatniego dnia kwartału obcina dokumenty wystawione po północy w sensie zapisu czasu. Utrzymanie baz pod sprawozdawczość okresowąSerwisujemy oprogramowanie handlowe oparte o SQL Server, a końcówka kwartału to moment, w którym najczęściej wychodzą zaniedbania: brak przebudowy indeksów, nieaktualne statystyki, przepełniony dziennik transakcji i zapytania raportowe blokujące wystawianie dokumentów. Porządkujemy plan konserwacji, dobieramy indeksy pod faktycznie używane raporty i sprawdzamy kopie zapasowe, zanim okaże się, że są potrzebne. Działamy siedem dni w tygodniu, więc zamknięcie okresu w weekend nie jest przeszkodą. |