Страница 1 из 1

Разреженная матрица

Добавлено: 06 окт 2015, 16:03
DmitryRu
Здравствуйте.
Не хватает функционала стандартного кросс-таба, приходится эмулировать его руками.
Под "не хватает" понимаю, например, такую проблему:
отчет имеет 3 группировки по Rows, и надо нарисовать итоги по каждой из этих групировок, взяв их с сервера. Т.е. итоги не могут быть вычислены из отображаемых данных, сервер присылает их в виде отдельного датасета.
Например, есть группировка по годам, а внутри нее группировка по месяцам, а внутри группировка по дням. Надо в строке "Итого по месяцу" вывести значение из отдельного DataSource. Проблема в том, что даже с использованием такого подхода
http://support.stimulsoft.com/index.php ... -cross-tab
я не могу, при рисовании промежуточного итога для месяца, вычислить, для какого месяца сейчас рисуется итог.
А, вообще говоря, надо нарисовать по несколько итогов, и для месяца и для каждого года.
"Итого с НДС", "Просто итого" и еще один хитро вычисляемый на сервере.
Считаю, что компонент CrossTab не поддерживает требуемый уровень расширяемости.

Теперь собственно проблема.
Есть набор данных из двух полей:
Date, Value
Предположим, 3 строки, за 10, 15 и 20 февраля.
Надо отобразить их в разреженной матрице, у которой, для февраля, есть все числа от 1 до 28. (а у декабря - от 1 до 31)
Для тех чисел, для которых записей нет, просто пустое место можно нарисовать.
Пока есть идея вывести исходный датасет на бэнде нулевой высоты, и записать в Hashmap.
А потом, при отображении фиксированной сетки выгребать данные из этого Hashmap.
Но как-то это кустарно... Нет ли встроенной функции Lookup(DataSource, Condition)?

Спасибо.

Re: Разреженная матрица

Добавлено: 07 окт 2015, 16:56
Aleksey
Здравствуйте,

Не могли бы вы прислать тестовые данные и пример, как это должно выглядеть, для анализа.
Возможно, как-то можно решить данную задачу с помощью скриптов.

Спасибо.

Re: Разреженная матрица

Добавлено: 07 окт 2015, 17:15
DmitryRu
Вы о каком примере говорите?

Есть 2 проблемы:
1) Изначальная проблема в недостаточной гибкости кросстаба.
Мне нужно в кросстабе с тремя уровнями группировки по строкам (для простоты, группировка по годам -> по кварталам-> по месяцам) нарисовать несколько итогов на внутренних уровнях группировки (допустим, итого по месяцу с учетом НДС и без учета НДС). Причем эти итоги невозможно вычислить в отчете, они приходят из СУБД в отдельном датасете. Проблема в том, что при перехвате события ProcessCell недостаточная информация о родительских уровнях кросстаба. Да и вообще не вижу способа сделать 3 итога на промежуточной группировке.

2) Потому я начал реализовывать этот отчет на компоненте CrossData. Тут есть наведенная проблема, в том, что по сути надо отображать разреженную матрицу. Похоже, ее можно решить только с помощью двухпроходного формирования отчета с помощью HashMap, заполняемого из Databand с нулевой высотой. В принципе, я уже согласен на такой вариант :-)

Но если Вам интересна изначальная проблема с недостаточной гибкостью кросстаба, могу, конечно, попытаться более подробно рассказать....

Спасибо.

Re: Разреженная матрица

Добавлено: 09 окт 2015, 09:13
Aleksey
Здравствуйте,

Компонент кросс-таблица сам по себе очень сложный. И, на текущий момент, какие-либо изменения в него вносить очень сложно.
Ваша задача не совсем стандартная, поэтому стандартными способами ее решить не получится, нужно использовать несколько проходов и скрипты.

Спасибо.