Найдите передовой метод обработки данных Business Intelligent - PullRequest
0 голосов
/ 29 мая 2020

Я работаю в системе, которая управляет человеческими ресурсами, и в ней есть часть BI (Business Intelligent) для сбора и обработки данных из основной системы, а затем визуализации обработанных данных в диаграммах, таблицах и т. Д.

Например, мы хотим увидеть связь между возрастом человека [в диапазоне 18–38] (на оси 1) и их ежемесячной заработной платой (на оси 2) [в полном диапазоне заработной платы]. Сумма агрегации подсчитывается лично. Существует также дополнительный шаг под названием Фильтр для фильтрации результата только в организации A.

Ожидаемый результат выглядит следующим образом:

                 Age_18<28   Age_28<38 Age_38<48
Salary_<1000         12          25       45
Salary_1000<5000     12          10       2
Salary_>5000         1           1        2

Текущие шаги обработки следующие:

  1. Поиск по оси 1: поиск всех людей с возрастным диапазоном [18–38] в организации A
  2. Поиск по оси 2: поиск всех людей в организации A
  3. Объединить результаты для оси 1 и оси 2
  4. Подсчет людей для каждого условия, например, количество людей с возрастом_18 <28 И зарплатой_ <1000 равно 12 и т. д. </li>
  5. Преобразовать в json response

Поскольку приходится обрабатывать множество случаев, logi c становится сложно поддерживать. Все шаги выполняются вручную, как указано выше.

Поэтому мне просто интересно, является ли это распространенной проблемой и должен ли быть общий способ решения, например шаблон проектирования, или алгоритм, или библиотека (Java) или конкретная c концепция для обработки таких вещей, о которых я никогда раньше не знал.

Цель: - сделать код более простым, читаемым и поддерживаемым - легко расширить, т.е. добавить новые случаи

Что я я собираюсь попробовать: - Применить цепочку ответственности + шаблоны стратегии - Просто интересно, будет ли Apache Kafka правильным путем

Примечание: приведенное выше - это очень простой случай, он может содержать несколько элементов в 1 ось, с некоторыми дополнительными условиями

Ответы [ 2 ]

0 голосов
/ 11 августа 2020

Есть скоростная автомагистраль, решающая вашу проблему. SPL (язык структурированных процессов) может гибко и легко управлять сценарием ios с различными неполевыми условиями. Вот пример кода для вашего случая.

Salary=db.query("select * from Salary")
bySal=["?<=1000" ,"?>1000 && ?<=5000","?>=5000"]
bySalGroup=sales.enum(bySal,SalGroup)
result=bySalGroup.new(bySal(#):bySal,SalGroup.select(~.age<28).count():Age_28,SalGroup.select(~.age<38).count():Age_38,SalGroup.select(~.age<48).count():Age_48)

SPL поддерживает вывод результата напрямую и передачу данных в приложение Java или инструмент отчетности посредством вызова. SPL предлагает интерфейс JDB C для возврата результата в основное приложение Java в форме ResultSet.

Дополнительные ссылки см. В http://c.raqsoft.com/article/1574666576078

0 голосов
/ 29 мая 2020

Один из способов представить это - накапливать подсчеты в таблице частот 3 x 3.

  1. Напишите простой метод сопоставления зарплаты с индексом следующим образом:

      < 1000         => 0
      1000 to < 5000 => 1
      >= 5000        => 2
    

    Существует несколько способов кодирования этого метода.

  2. Напишите простой метод сопоставления возраста с индексом следующим образом:

      18 to < 28     => 0
      28 to < 38     => 1
      38 to < 48     => 2
    
  3. Сложите это так:

      int counts[][] = new int[3][3];
      for each person: p in ...
          counts[ageIndex(p.age)]][salaryIndex(p.salary)] += 1;
    

Вы можете легко реализовать это в Java и, возможно, в SQL или в вашей системе BI. язык запросов ... если он есть.

Вы можете обобщить это на M x M и другие измерения. Если вы приложите немного усилий, вы сможете реализовать сопоставления как функцию, управляемую данными; например,

 public int mapToIndex(int value, int[] ranges) { ... }

Обратите внимание, что в том, что вы делаете, есть изъян. Сотрудники могут быть моложе 18 или старше 48 лет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...