Оформление
Набор данных программы - Справка FineReport | Разработка отчетов | Использование отчетов | Учебные пособия
Наборы программных данных
1. Обзор
1.1 Сценарии применения
Иногда пользователям необходимо использовать пользовательские типы источников данных для анализа данных и представления приборных панелей.
1.2 Функциональный профиль
FineBI может установить удаленное соединение с FineReport для использования пользовательских наборов данных из источников данных, чтобы BI-движок считывал заданные источники данных для анализа данных и создания приборных панелей.
Примечание: данные программы были изменены с полнообъемного извлечения данных на потоковое извлечение из памяти, которое поддерживает извлечение миллиардных объемов данных.
2. Примеры
В этом примере в качестве введения используется встроенный в FineBI журнал выполнения шаблонов.
2.1 Определение программы источника данных
Нажмите, чтобы загрузить файл журнала выполнения шаблона: ExecuteLog.class
Нажмите, чтобы загрузить файл журнала управления платформой: OperateLog.class
1) Выполните файлLog.class и скопируйте его в %FineBI%/webapps/webroot/WEB-INF/classes/com/fr/log, в это время определение источника данных программы проходит успешно, как показано ниже:

Код файла журнала выполнения шаблона показан ниже и может быть скомпилирован в файл класса:
package com.fr.log; import com.fr.data.AbstractTableData; import com.fr.decision.log.ExecuteMessage; import com.
fr.general.data.TableDataException; import com.fr.intelli.record.MetricRegistry; import com.fr.stable.query.QueryFactory.
import com.fr.third.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; /**.
* @author Munin * @version 5.1.3 * Created by Munin on 2020/4/27 */
public class ExecuteLog extends AbstractTableData { private static final
long serialVersionUID = -3233073054624031382L; private String[] columnNames&
nbsp;= {"tname", &
nbsp; "type",
"userrole", "param", &
nbsp; "ip", &
nbsp; "username", "consume", "sql", & nbsp; "ip", & nbsp; "username",
"sql",
"браузер", "
память", "время", &
nbsp; "reportId" }; private
List<List<Object>> cacheData = new ArrayList<>(); public
ExecuteLog() { } /** * Ленивая загрузка для решения проблем с производительностью ненужных деталей выборки  
; */ private List<List<Object>> getExecuteData() { &
nbsp; if (CollectionUtils.isEmpty(cacheData)) { &
nbsp; init(); } &
nbsp; return cacheData; } private void init() {
try { List< ExecuteMessage> messages = MetricRegistry.getMetric().find(ExecuteMessage.class, QueryFactory.create()).
getList(); if (messages !
= null && !messages.isEmpty()) { &
nbsp; for (ExecuteMessage message : messages) {   ; List<Object> objects =
new ArrayList<Object>();  
; objects.add(message.getTemplate());   ; List<Object> objects = new ArrayList<Object>();  
nbsp; objects.add(message.getType()); &
nbsp; objects.add(message.getUserrole()); objects.add(message.
getParameters());  
nbsp; objects.add(message.getIp()); objects.add(message.getParameters());  
nbsp; objects.add(message.getUsername());
objects.add(message.getConsume());
objects.add(message.getSql()); & nbsp; objects.add(message.
getBrowser()); &
nbsp; objects.add(message.getMemory()); &
nbsp; objects.add(message.getTime()); &
nbsp; objects.add(message.getReportId());
cacheData.add(objects);  
; } &
nbsp; } } catch (Exception e) { &
nbsp; FineLoggerFactory.getLogger().error(e.getMessage(), e);  
; } } @Override public int
getColumnCount() throws TableDataException { return columnNames
.length; } @Override public String getColumnName(
int i) throws TableDataException { return columnNames[i]; &
nbsp; } @Override public int getRowCount() throws&
nbsp;TableDataException { return getExecuteData().size(); &
nbsp; } @Override public Object getValueAt(int i, int
i1) { List<List<Object>> data = getExecuteData(); &
nbsp; if (i < data.size()) { &
nbsp; List<Object> message = data.get(i); &
nbsp; if (i1 < message.size()) { &
nbsp; return message.get(i1); &
nbsp; } } return&
nbsp;null; }2.2 Установка удаленного соединения
Сначала вам нужно удаленно подключить конструктор к серверу FineBI. Дополнительную информацию см. здесь:Удаленное подключение к конструктору FineReport
1 ) Откройте конструктор и выберитеServer > Server Dataset,как показано ниже:

2) Перейдите на экран Server Dataset Setup и выберите +>Programmes (Программы ), как показано ниже:

3) Нажмите Select (Выбрать), выберите добавленный файл ExecuteLog.class и нажмите OK, чтобы сохранить его. Как показано на рисунке ниже:

4) Вы можете увидеть набор данных программы, который вы только что добавили, под набором данных сервера, как показано на следующем рисунке:
Примечание: Если вы хотите добавить сюда несколько файлов, вы можете повторить описанные выше действия, чтобы выбрать файл OperateLog.class для добавления.

2.3 Добавление таблицы данных программы в FineBI
1) Администратор входит в систему FineBI, нажимает "Public Data", выбирает любую папку, нажимает "New Dataset > Database Table", как показано на рисунке ниже:

2) В разделе Server Dataset вы можете увидеть процедуру 4, которую вы только что добавили в конструкторе, выберите таблицу и нажмите OK, чтобы добавить ее в используемый бизнес-пакет. Как показано на рисунке ниже:
