对字符串中数据进行分类统计

例题描述和简单分析

数据库中有 SURVEY 表,包含两个字段:QID 和 ANSWERS,如下:

QID

ANSWERS

1

A|B|A|C|D|E|A|E|C|D

2

A|C|E|D|A|E|D|B|E|D

3

C|D|E|A|B|C|A|C|E|A

4

E|E|B|A|D|B|C|A|B|D

5

D|A|C|B|E|A|B|D|D|A

6

A|C|A|C|C|E|D|B|E|C

7

E|B|A|A|A|B|A|C|D|D

8

B|C|D|C|C|E|C|A|C|A

9

B|C|A|E|E|B|A|A|D|E

需要对 ANSWERS 中的数据进行分类统计,结果如下:

QID

ANSWER

NUM

1

A

3

1

B

1

1

C

2

1

D

2

1

E

2

2

A

2

2

B

1

解法及简要说明

在集算器中编写脚本 p1.dfx,如下所示:


A

1

=connect("demo")

2

=A1.query@x("SELECT *   FROM SURVEY")

3

=A2.news(ANSWERS.split("|");QID,~:ANSWER)

4

=A3.group(QID,ANSWER;count(~):NUM)

简要说明:

A1  连接数据源名称为 demo 的数据库

A2  执行 SQL,返回查询结果所组成的序表,结束时自动关闭数据库连接

A3  循环 A2 每行,把 ANSWERS 按 "|" 拆分成序列,按每个序列成员转变成一个新行,新行由 2 列组成:第 1 列是 QID,第 2 列是拆分出的序列的当前成员 (~ 表示),命名为 ANSWER

A4  按 QID,ANSWER 分组,统计每组中的数据条数

BIRT集成这段代码的方法可参考:《BIRT如何调用 SPL 脚本》

问答搜集

https://stackoverflow.com/questions/48193324/how-to-split-a-string-into-an-array-of-characters-in-birt