Танкист Апокалипсиса
11:32

Итак, вот что мне сказали сделать вчера:

Отчёт должен генерироваться с итогами как за текущий отчётный период,

так и за предыдущий, для отражения динамики изменения показателей.

Вдобавок потребовали, чтобы отчёты теперь составлялись каждую неделю.

По первой проблеме в результате пришлось написать два новых запроса:

Первый осуществляет выборку данных за предыдущий период, а второй осуществляет

"внутреннее слияние" двух таблиц по номеру части, с отсеканием ненужных полей.

Результат выводится в отчёт.

Чем мне не нравится данная схема: приходится дважды прогонять выборку по датам,

что, разумеется, не сказывается положительно на производительности.



А вот что делать с дополнительными отчётными периодами, я пока так и не

придумал. По-хорошему, нужно менять схему данных. Вместо привязок к годам,

месяцам и датам ввести "плоскую адресацию", по неделям. Единственное, что

смущает - не придумал пока, как отображать даты правильно.

По-плохому же можно просто завести ещё два отчётных периода, и привязать их

к определённым датам. И всё.

Первый вариант позволит упростить схему данных и ускорить операции по выборке.

Второй вариант позволяет решить проблему с минимальными напрягами.

Есть ещё третий вариант, гибридный: плоская адресация по отчётным периодам (не по неделям, а по произвольным периодам). Это даёт некоторую свободу манёвра:

если не нужно представлять данные каждую неделю, то можно просто не заводить

лишних отчётных периодов.

12:55

Решил посмотреть, что можно сделать по третьему варианту.

Застопорился на том, что не получается в одну форму запихать два источника

данных. Можно обойтись слиянием таблиц, но в таком случае надо уже изощряться с

сохранением данных.

15:08

Обошёл все препятствия. Что мне сейчас не нравится - происходит три слияния

таблиц, чтобы правильно отображать даты. Но от этого зла практически не убежать,

зато остальные запросы выполняются теперь быстрее.

Пойду, почищу базу от лишних полей.

15:17

Хм. Размер базы изрядно сократился. :-)

15:52

Ещё я радуюсь тому, что изначально запросы у меня были разбиты на два-три шага

(первый - отбор по датам), за счёт чего мне не пришлось переделывать два десятка

запросов, ограничился двумя.