【问题标题】:Find a best practice for Business Intelligent data processing寻找商业智能数据处理的最佳实践
【发布时间】:2020-05-29 02:48:30
【问题描述】:

我在一个管理人力资源的系统中工作,它有一个 BI(商业智能)部分来收集和处理来自主系统的数据,然后将处理后的数据可视化为图表、表格、..

例如,我们希望查看人员年龄 [在 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. 搜索axis1:搜索组织A中所有年龄范围为[18-38]的人
  2. 搜索axis2:搜索组织A中的所有人
  3. 合并轴 1 和轴 2 的结果
  4. 计算每个条件的人数,例如 Age_18
  5. 转换为 json 响应

因为要处理的案例很多,逻辑维护起来也变得复杂。所有步骤都像上面一样手动处理。

所以我只是想知道这是否是一个常见问题,是否应该有一个通用的方法来处理,例如设计模式、算法、库 (Java) 或特定概念来处理我以前不知道的此类事情。

目标: - 使代码更简单、可读和可维护 - 易于扩展,即添加新案例

我将要尝试的内容: - 应用责任链+战略模式 - 只是想知道 Apache Kafka 是否是正确的方法

注意:以上只是一个非常简单的例子,它可能在一个轴上包含多个项目,还有一些附加条件

【问题讨论】:

  • 如果你只是想通过过滤和排序来处理数据,你可以使用 jquery datatable 之类的东西。它们提供过滤、排序、分组等功能,还可以将数据导出到 PDF 和 Excel。
  • 无需重新发明轮子 - 只需为此目的选择合适的 BI 解决方案,您就可以像这样配置数据透视表报告,而无需编写和维护 Java 代码。
  • 但实际上这是一个遗留的 BI 系统,我的工作是改进和维护它
  • “最佳实践”是不这样做 :-) 但实际上,satisfice.com/blog/archives/5164

标签: java design-patterns business-intelligence data-processing


【解决方案1】:

考虑这一点的一种方法是在 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 岁。

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多