(Untitled)

Dec 28, 2011 15:09

есть задача ( Read more... )

Leave a comment

metaclass December 28 2011, 12:31:22 UTC
Эту хрень еще называют шахматной ведомостью или кросс-отчетом.
Я ее делал таким образом:
1) метаданные заголовков по X,Y - список описаний каждого заголовка, хранятся в том порядке, в котором группируются. В описании имя поля, формат и прочее по мелочи, типа "кастомная функция форматирования"
2) метаданные ячеек. список описаний каждого поля отображаемого в ячейке на пересечении. тоже - имя поля, формат, иногда функция аггрегирования.
3) данные заголовков: как и в предложенной модели, список списков
4) данные ячеек: как и в предложенной модели, Map из пары координат в список значений полей ячейки

Reply

m_a_m_o_n December 28 2011, 13:14:39 UTC
Да, BIRT например умеет строить такие отчёты по выборке
SELECT x_name, y_name, sum(value)
FROM ...
GROUP BY x_name, y_name
ORDER BY x_name, y_name

P.S. это не значит что нужно его использовать.

Reply

n1919 December 28 2011, 16:59:06 UTC
упс.
у этой схемы есть изъян.
записи заголовков должны быть отсортированы в определенном порядке.
это можно сделать только когда все записи прочитаны, т.е. прочитан
весь ResultSet.
но если мы потом их отсортируем, то индексы в Map
станут неправильными, на них-то сортировка не распространяется...

Reply

metaclass December 28 2011, 17:11:42 UTC
Сейчас загляну в код. Я там что-то мудрил с правильной сортировкой.
Да, я делал еще более злым образом, оказывается.
У меня на вход генератора отчетов передается три итератора - для значений X, для значений Y и для ячеек. Первые два нужны(но не обязательны) чтобы некоторые ячейки показывались даже если для них нету данных в списке ячеек.
А в качестве координат используются не индексы в массивах значений X и Y, а сами эти значения, специальным образом отформатированные, чтобы сортировались в правильном порядке. Т.е. при заполнении из итератора одновременно заполняются и заголовки и ячейки, сортировка не портится.

Reply

metaclass December 28 2011, 17:15:39 UTC
Т.е. там в качестве хранилища, вообще говоря, Map, но сохраняющий порядок сортировки ключей.
SortedMap наверно в этой вашей Java :)

Reply


Leave a comment

Up