繁体   English   中英

寻找商业智能数据处理的最佳实践

[英]Find a best practice for Business Intelligent data processing

我在一个管理人力资源的系统中工作,它有一个 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<28 AND Salary_<1000 的人数为 12,依此类推。
  5. 转换为 json 响应

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

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

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

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

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

考虑这一点的一种方法是您在 3 x 3 频率表中累积计数。

  1. 写一个简单的方法将map的薪水转为一个索引如下:

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

    有多种方法可以对此方法进行编码。

  2. 写一个简单的方法把map的年龄给一个索引如下:

     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 和更多维度。 如果你付出一点努力,你实际上可以将映射实现为数据驱动的 function; 例如

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

请注意,您所做的事情存在缺陷。 员工可能小于 18 岁或大于 48 岁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM