中国报表的第二个重要特征是分片,与多源相关,但又不完全一样。多源一般都会是分片的,但分片却不一定是多源的。
还是上面这两个例子(见5.1 多数据源),两个报表都很明显地分成了两片,每片都有自己独立的规则,很难统一成一种规则处理。而我们手中的报表工具,如果不考虑采用子报表的话,都要求报表有统一的规则,整个报表只有一片可以重复的区域(细节区和相邻的分组区),因为是单源的,想当然地以为只要一片重复区就够了,理论上就不可能做到分片规则了。
但中国报表中分片现象太常见了,同一批数据也可能按不同的主题统计汇总,比如人事表中并列着按民族划分再按学历划分。事实的情况还远不止分作两片,常常是竖着五六片,横着也是五六片,整个报表乘起来就有二十五六片。而且片与片之间又不是完全独立,横向的分片在纵向规则却又是一致的,反之也是如此。既便想做成子表,也不大容易,每个分片的表头都要重复编排,对齐就不说了。
如果运气好,虽然分片了,但整个表的样式看起来还是一致的(比如上面的第二个表),那还可以使出最后的杀手锏——写代码!
运气不会时时都好,如果碰到那种上下(或左右)几个分片中分组层数都不一样的表,就算代码能把数给算好,可格子却拼不出那种上下不同的样子,这会儿就会特别想念EXCEL了,至少样式是可以很随意的,写代码也就可以搞定了。
具体到每个分片也不是省油的灯,不象老外弄得那么简单,一下把所有的数都列出来,或者把所有的分组一个不落一个不重的列出来,这种搞法我们叫做“完全划分”。对应的就还有“不完全划分”,也就是分组中并不是把所有出现的情况都列出来(这种很常见),而且还可能重复列出(这个相对少见些)。比如我们按民族划分人员时,不大可能把五十六个民族全来一遍,一般也就是列几个大的民族再加个其它。比较典型的不完全划分现象就是固定行列,无论数据库中有多少记录多少分组,只关心这几种情况,表格永远只有这几行(列)。
老外的东西天生就是和数据库绑定的,固定行的不是搞不出来,可又要写代码或者复杂的SQL去准备数据,象著名的资产负债表,用这些报表工具去做简直就是摧残生命。
而且就算是会变的,这些工具也还有个行列不对称的问题,由于和数据库贴得太紧,大家只见过记录数会变的数据表,都没怎么见过字段数也会变的数据表,所以它们也就专心处理行方向的变化,拒绝去处理列数会变的表。后来总算有了一些打补丁的交叉表模板,能对付用着,但总是用起来不那么得心应手,除非特别规整的交叉报表,否则这些大牌武器就又虾米了。