2013-04-09 74 views
0

我有一组电子表格,它们定义了一组业务规则。这些业务规则然后由我们的系统处理。通过对数据进行分组来减少行数

创建电子表格的用户做得太天真了,我发现通过将行间数据分解 - 从而减少规则数量 - 极大地提高了系统的性能。

其中的“天真”结构化的电子表格可能是这样的:

+-----------+------------+------------+------------+------------+--------+ 
| Rule Name | Criteron 1 | Criteron 2 | Criteron 3 | Criteron 4 | Accept | 
+-----------+------------+------------+------------+------------+--------+ 
| Rule 1 |  A  |  B  |  C  |   | Yes | 
| Rule 2 |  A  |  C  |  C  |   | Yes | 
| Rule 3 |  A  |  D  |  C  |   | Yes | 
| Rule 4 |  A  |  E  |  C  |   | Yes | 
| Rule 5 |  A  |  F  |  C  |   | Yes | 
| Rule 6 |  A  |  B  |  D  |   | Yes | 
| Rule 7 |  A  |  C  |  D  |   | Yes | 
| Rule 8 |  A  |  D  |  D  |   | Yes | 
| Rule 9 |  A  |  E  |  D  |   | Yes | 
| Rule 10 |  A  |  F  |  D  |   | Yes | 
| Rule 11 |  A  |  B  |  E  |   | Yes | 
| Rule 12 |  A  |  C  |  E  |   | Yes | 
| Rule 13 |  A  |  D  |  E  |   | Yes | 
| Rule 14 |  A  |  E  |  E  |   | Yes | 
| Rule 15 |  A  |  F  |  E  |   | Yes | 
| Rule 16 |   |   |   |  G  | Yes | 
| Rule 17 |   |   |   |  H  | Yes | 
| Rule 18 |   |   |   |  I  | Yes | 
| Rule 19 |   |   |   |  J  | Yes | 
| Rule 20 |   |   |   |  K  | Yes | 
| Rule 21 |   |   |   |  L  | Yes | 
| Rule 22 |   |   |   |  M  | Yes | 
| Rule 23 |   |   |   |  N  | No | 
| Rule 24 |   |   |   |  O  | No | 
| Rule 25 |   |   |   |  P  | No | 
| Rule 26 |   |   |   |  Q  | No | 
| Rule 27 |   |   |   |  R  | No | 
| Rule 28 |   |   |   |  S  | No | 
| Rule 29 |  A  |  J  |  F  |   | No | 
| Rule 30 |  A  |  K  |  F  |   | No | 
+-----------+------------+------------+------------+------------+--------+ 

作为一个例子,第1条将被评估为:

IF (Criterion 1 == A) AND (Criterion 2 == B) AND (Criterion 3 == C) THEN Accept 

必须思考和假设我们可以在我们的列中使用OR条件,上面的可以简化为:

+-----------+------------+------------+------------+-------------+--------+ 
| Rule Name | Criteron 1 | Criteron 2 | Criteron 3 | Criteron 4 | Accept | 
+-----------+------------+------------+------------+-------------+--------+ 
| Rule 1 |  A  | B,C,D,E,F | C,D,E |    | Yes | 
| Rule 2 |   |   |   |G,H,I,J,K,L,M| Yes | 
| Rule 3 |   |   |   |N,O,P,Q,R,S | No | 
| Rule 4 |  A  |  J,K |  F  |    | No | 
+-----------+------------+------------+------------+-------------+--------+ 

规则1现在是评估如下:

IF (Criterion 1 == A) AND 
    (Criterion 2 == B OR Criterion 2 == C OR...) AND 
    (Criterion 3 == C OR Criterion 3 == D OR...) THEN Accept 

现在,我已经做了这个手动。我想知道的是:Excel是否具有内置功能来为我进行这种分组。如果没有,任何人都可以指向我的算法的方向,这将有助于我有效地实现这一点?

+0

您可能需要更好地描述您在缩减输出中将规则1到规则1中的规则1到规则15组合使用的逻辑,因为我没有关注为什么这15个“规则”全部归结为输出中的一条规则。如果你能做到这一点,这肯定可以用一些VBA来完成。 – 2013-04-09 14:06:03

+0

请告诉我们您使用的规则/标准 – 2013-04-09 14:22:04

+0

@DavidZemens,我已经添加到我的问题 - 希望现在更清楚。 – Griffin 2013-04-09 14:42:15

回答

0

这看起来像一个情况下,你可以查询使用ADO和OLE DB到ADO记录集使用GROUP表由SQL查询HAVING,然后转储(分组)的结果为使用CopyFromRecordset

你的新工作表

另外,也许是一个数据透视表?

+0

感谢您的回答菲利普,请您提供一些关于您的解决方案的更多细节? – Griffin 2013-04-10 09:21:57

+0

好吧,如果你把你的表变成一个命名范围(比如'RulesData'),那么保存工作簿并关闭它。打开一个新的工作簿,并在数据菜单上选择>导入外部数据>新建数据库查询... (最初)为您的Excel文件创建一个dsn连接,并在MS Query中创建一个SQL查询以从表'RulesData'中选择数据并对其进行分组(使用GROUP BY) – 2013-04-10 09:30:56

相关问题