Эта статья является продолжением предыдущей, в которой мы рассматривали создание сложного отчёта. Отчёт, созданный в той статье, послужил одним из источников вдохновения для нового объекта – AdvancedMatrix, или же Улучшенная Матрица.
Отчёт в предыдущей статье состоял из трёх секций:
1) статистика по годам;
2) статистика по кварталам;
3) статистика по месяцам.
Каждая из секций была реализована с помощью отдельной матрицы, что пришлось сделать из-за ограничений стандартного MatrixObject. В новой версии FastReport .NET мы добавили обновлённую версию этого объекта, который называется AdvancedMatrix. Он позволяет реализовать весь отчёт в одной матрице. Рассмотрим, как это сделать.
Добавим на пустой бэнд данных объект AdvancedMatrix:
Вспомним, как выглядят данные, которые мы используем:
Для простейшей матрицы нам нужно перетащить три поля: country_name, fruit_type и amount.
Вот как выглядит матрица теперь:
Новая матрица позволяет менять вычисления в ячейках. В этом случае нам нужна сумма, но мы можем заменить её на что-либо из следующего списка:
Давайте переделаем матрицу. Нам нужно, чтобы поля country_name и fruit_type использовались в группировке - отчёт должен сгруппировать список фруктов по странам, и должна быть колонка для каждого отдельного года:
На этом этапе мы выходим за пределы возможностей обычного MatrixObject. Добавим к матрице дополнительные поля year и quarter, а также заменим пустые значения на нули:
То, что ранее приходилось делать двумя матрицами, теперь можно реализовать с помощью всего одной. Теперь у нас есть разбивка и по годам, и по кварталам. Пойдём ещё дальше.
На этом этапе у нас есть матрица, которая отражает все необходимые данные. Для большей читаемости мы можем поменять отображение матрицы и данных.
Во-первых, объединим ячейки, где будет находиться только текст:
С отображением данных может помочь новое меню редактирования заголовков:
И теперь матрица выглядит таким образом:
Наконец, мы можем сравнить скорость подготовки отчёта в случае, когда он состоит из трёх обычных матричных объектов, и когда он состоит из одной большой матрицы.
Проверка проводилась на компьютере с AMD Ryzen 5 3600 и 16GB оперативной памяти. В таблице данных отображено 5000 записей.
Попытка |
3 матрицы MatrixObject |
1 AdvancedMatrix |
#1 |
906 ms |
656 ms |
#2 |
828 ms |
625 ms |
#3 |
937 ms |
640 ms |
#4 |
875 ms |
641 ms |
#5 |
891 ms |
672 ms |
#6 |
922 ms |
656 ms |
Среднее: |
893.3 ms |
648.3 ms |
Как вы видите, время подготовки в среднем падает на ~27%, что может сохранить очень много времени на отчётах с большим количеством данных.
В этой статье мы показали, как в точности воссоздать отчёт из предыдущей статьи. Улучшенная Матрица позволяет реализовать несколько функций, которые были бы полезны в нём – например, фильтрующая сортировка TopN, позволяющая выбрать 5 записей с самыми высокими вычисленными значениями.
Вы можете узнать про все особенности этого объекта в нашей документации.