Танкист Апокалипсиса
11:32
Итак, вот что мне сказали сделать вчера:
Отчёт должен генерироваться с итогами как за текущий отчётный период,
так и за предыдущий, для отражения динамики изменения показателей.
Вдобавок потребовали, чтобы отчёты теперь составлялись каждую неделю.
По первой проблеме в результате пришлось написать два новых запроса:
Первый осуществляет выборку данных за предыдущий период, а второй осуществляет
"внутреннее слияние" двух таблиц по номеру части, с отсеканием ненужных полей.
Результат выводится в отчёт.
Чем мне не нравится данная схема: приходится дважды прогонять выборку по датам,
что, разумеется, не сказывается положительно на производительности.
А вот что делать с дополнительными отчётными периодами, я пока так и не
придумал. По-хорошему, нужно менять схему данных. Вместо привязок к годам,
месяцам и датам ввести "плоскую адресацию", по неделям. Единственное, что
смущает - не придумал пока, как отображать даты правильно.
По-плохому же можно просто завести ещё два отчётных периода, и привязать их
к определённым датам. И всё.
Первый вариант позволит упростить схему данных и ускорить операции по выборке.
Второй вариант позволяет решить проблему с минимальными напрягами.
Есть ещё третий вариант, гибридный: плоская адресация по отчётным периодам (не по неделям, а по произвольным периодам). Это даёт некоторую свободу манёвра:
если не нужно представлять данные каждую неделю, то можно просто не заводить
лишних отчётных периодов.
12:55
Решил посмотреть, что можно сделать по третьему варианту.
Застопорился на том, что не получается в одну форму запихать два источника
данных. Можно обойтись слиянием таблиц, но в таком случае надо уже изощряться с
сохранением данных.
15:08
Обошёл все препятствия. Что мне сейчас не нравится - происходит три слияния
таблиц, чтобы правильно отображать даты. Но от этого зла практически не убежать,
зато остальные запросы выполняются теперь быстрее.
Пойду, почищу базу от лишних полей.
15:17
Хм. Размер базы изрядно сократился. :-)
15:52
Ещё я радуюсь тому, что изначально запросы у меня были разбиты на два-три шага
(первый - отбор по датам), за счёт чего мне не пришлось переделывать два десятка
запросов, ограничился двумя.
Итак, вот что мне сказали сделать вчера:
Отчёт должен генерироваться с итогами как за текущий отчётный период,
так и за предыдущий, для отражения динамики изменения показателей.
Вдобавок потребовали, чтобы отчёты теперь составлялись каждую неделю.
По первой проблеме в результате пришлось написать два новых запроса:
Первый осуществляет выборку данных за предыдущий период, а второй осуществляет
"внутреннее слияние" двух таблиц по номеру части, с отсеканием ненужных полей.
Результат выводится в отчёт.
Чем мне не нравится данная схема: приходится дважды прогонять выборку по датам,
что, разумеется, не сказывается положительно на производительности.
А вот что делать с дополнительными отчётными периодами, я пока так и не
придумал. По-хорошему, нужно менять схему данных. Вместо привязок к годам,
месяцам и датам ввести "плоскую адресацию", по неделям. Единственное, что
смущает - не придумал пока, как отображать даты правильно.
По-плохому же можно просто завести ещё два отчётных периода, и привязать их
к определённым датам. И всё.
Первый вариант позволит упростить схему данных и ускорить операции по выборке.
Второй вариант позволяет решить проблему с минимальными напрягами.
Есть ещё третий вариант, гибридный: плоская адресация по отчётным периодам (не по неделям, а по произвольным периодам). Это даёт некоторую свободу манёвра:
если не нужно представлять данные каждую неделю, то можно просто не заводить
лишних отчётных периодов.
12:55
Решил посмотреть, что можно сделать по третьему варианту.
Застопорился на том, что не получается в одну форму запихать два источника
данных. Можно обойтись слиянием таблиц, но в таком случае надо уже изощряться с
сохранением данных.
15:08
Обошёл все препятствия. Что мне сейчас не нравится - происходит три слияния
таблиц, чтобы правильно отображать даты. Но от этого зла практически не убежать,
зато остальные запросы выполняются теперь быстрее.
Пойду, почищу базу от лишних полей.
15:17
Хм. Размер базы изрядно сократился. :-)
15:52
Ещё я радуюсь тому, что изначально запросы у меня были разбиты на два-три шага
(первый - отбор по датам), за счёт чего мне не пришлось переделывать два десятка
запросов, ограничился двумя.