報表中如何實現不規則布局

2021-09-20 01:12:13 字數 3985 閱讀 8273

報表,我們習慣於認為主要用來呈現資料彙總、排序、分組對比的效果,一般都是「橫平豎直」的效果,也就是我們常說的二維**,最多也就是通過一些斜線、合併表示一些特殊的資料關係。事實上,報表還可以通過實行各種不規則的布局,來發揮更大的作用。

首先,我們就拿我們每個人幾乎都遇到過的大大小小的各種考試來舉例。每逢考試就一定會有考場座位分布圖,以便考生對號入座參加考試。這裡看乙個具體的案例,來自於某地的一次職業技能考試,總共涉及數十所所學校,數千名考生,每人參加 4 門學科,需要按照專業、場次、時間以及一定的隨機規則進行座次安排,最終輸出座位分布圖,然後列印並在各個考場張貼。要求每名考生的座位標籤如下圖所示:

整個教室的作為分布如下圖所示:

這種形式的報表就不再是簡單的「橫平豎直」了,而是我們所說的不規則布局。具體第說,這種布局有乙個形象的名稱「龍形布局」,也就是每個小的區域性作為標籤具有自己的布局,好像是龍的鱗片,而整體上又按照一定的寬度(這裡是 2 列)進行縱向排布。

那麼,有什麼方法可以簡單、快捷地一下子製作出數千人的「龍形布局」座次分布圖呢?——潤幹報表就可以!

話不多說,下面我們一起看一下潤幹報表中如何輕鬆搞定這類不規則布局的吧!

首先,根據效果圖繪製報表樣式和框架,如下:

這裡偷偷洩露乙個小【技巧】,我們使用「to 函式 + 縱向擴充套件」控制每列放幾張桌子,就是上圖 c4 單元格的表示式。

接下來,填入考生資訊,如下

其中:a4 單元格中表示式為:=ds1.group(zygzmc;zygzmc:1),合併單元格 a4-a8, 縱向擴充套件,分組取出職業名稱並公升序排列,後面的資料將預設以 a4 單元格為主格跟隨擴充套件取數。

b4 單元格中表示式為:=ds1.group(kcmc;kcmc:1),操作同上,kcmc 代表考場名稱

d5 單元格中表示式為:=valueat(ds1.select(llkczwh:-1,llkczwh<6),c4),給每個桌子貼上理論考場座位號

e4 單元格中表示式為:= 「理論:」+ds1.select(llpd,llkczwh==d5),ds.select 函式根據理論考場座位號(llkczwh)取出理論評審(llpd)成績

f4 單元格中表示式為:=ds1.select(zhpd:-1,llkczwh==d5),操作同 e4,zhpd 代表 綜合評審成績

e5 單元格中表示式為:=」實踐:」+ds1.select(scpd,llkczwh==d5),操作同 e4,scpd 代表實踐評審成績

e6 單元格中表示式為:=」綜合評審:」+ ds1.select(zhpd,llkczwh==d5),操作同 e4,zhpd 代表綜合評審成績

e7 單元格中表示式為:=ds1.select(xm,llkczwh==d5),操作同 e4,xm 代表考生姓名

e8 單元格中表示式為:=ds1.select(zkzh,llkczwh==d5) ,操作同 e4,zkzh 代表考生准考證號

到這裡,我們已經將左邊 1 列的 5 位同學安排妥當了,接下來的操作相對就簡單一些了,主要是把 d、e、f 列的內容複製到 h、i、j 列,然後做一些小的修改:

h5 單元格中表示式為:=valueat(ds1.select@r(llkczwh:1,llkczwh>5),c4),複製貼上得時候別忘記修改取數的範圍奧。

i4 單元格中表示式為:= 「理論:」+ds1.select@r(llpd,llkczwh==h5),注意注意,這裡有一丟丟變化奧, ds.select 函式使用 @r 選項是為了保證資料從根資料集中取數不受前面那列的影響奧。

j4 單元格中表示式為:=ds1.select@r(zhpd:-1,llkczwh==h5)

i5 單元格中表示式為:=」實踐:」+ds1.select@r(scpd,llkczwh==h5)

i6 單元格中表示式為:=」綜合評審:」+ds1.select@r(zhpd,llkczwh==h5)

i7 單元格中表示式為:=ds1.select@r(xm,llkczwh==h5)

i8 單元格中表示式為:=ds1.select@r(zkzh,llkczwh==h5)

bingo!有木有很意外,做到這裡就已經輕鬆搞定考場分布報表了,是不是趕腳很簡單,時間也節省了不少?多出來的時間您一定不介意(壞笑)我再多說些什麼吧…..
上面我們所完成的布局屬於平面規劃的直觀展示,接下來,我們再看一種非常實用的業務場景:

以倉儲行業為例,在實現了條碼管理的倉庫,出入庫單據可以通過簡單的掃碼完成貨品的歸位或取出,這時,出入庫單據上就需要印製多個條目,每一項都會有相應的條目,如果按照常規布局的話,如下

但是這種布局有乙個問題,就是很有可能會出現錯行掃瞄的情況!為此,潤幹報表又偷偷給關注的我們程式猿哥哥發福利了——製作列印以下這種「錯位」形式的「入場券」:

是不是已經迫不及待想要進場了解下這種條碼不規則「錯位「布局是怎麼被搞定的了? 別著急,我們這就開始說道說道:
將左右錯位的 2 個條形碼看做一組,先弄出個樣子,然後填寫相應的資料表示式,如下:

其中:a4 單元格中表示式為:

=if(ds1.count()%2==0,to(1,ds1.count()/2),to(1,ds1.count()/2+1)),根據條碼總數是奇數還是偶數,確定總共需要縱向擴充套件幾組。

b4 單元格中表示式為:=ds1.select(field1)(a4[-1]+a4),意從結果集 ds1.select(field1) 中根據行號取出條形碼

c4 單元格右鍵 選擇「條形碼」,內容表示式為:=b4,同時勾選「顯示文字」, 指定條形碼按照指定單元格資料呈現

b5 單元格右鍵 選擇「條形碼」,內容表示式為:=c5

c5 單元格中表示式為:=ds1.select(field1)(a4[-1]+a4+1)

然後……就沒有然後了……「噹噹當」,是不是嚇一跳,到這裡又乙個看似複雜的布局「錯位條碼清單」就這麼輕鬆搞定了,忍不住想要動手試試了,那就別猶豫了「擼起袖子,做起來吧 !!!」。

最最後,劃重點圈知識點啦,不看的話,明天用到可別怪我沒告訴您奧。
如何控制布局:

【知識點】使用 to() 函式來做一些特殊報**式的控制,根據條件限定行列數;

如何從乙個集合中取出指定的成員

【知識點】valueat() 常用於從陣列或者集合表示式中取出的某乙個元素;

如何排除前面列的影響直接從總結果集拿資料

【知識點】比如考場座位圖中 @r 選項的使用

【操作技巧】製作此類報表如果不能一眼找出資料呈現的規律以及取數方式不妨拿出紙筆,在紙上寫出一部分資料,或許一下就明白了。

說到這裡,關於「報表布局技巧與應用」的簡單介紹真的真的告一段落了,實現上面的效果我們僅僅是在常規展現的報表基礎上使用了 1-2 個函式(比如:to()、valueat()、if())就做出了考場座位圖、錯位條碼清單的效果,有木有感覺 so easy,幾個函式輕鬆搞定。從此以後,做表再也不用害怕遇到神馬倉庫貨位管理展示圖、學生宿舍的分布….. 的情況了, 總之一句話,有了潤幹報表,那都不是事兒!!!

號外號外:報表製作過程中設計到所有的函式都可從「使用者手冊—第 5 章 表示式及函式 」中查閱詳解奧,這個秘密一般人我不告訴的奧。

不規則月份統計報表的實現

不規則月份統計 如果起始時間是2014 01 10,則將2014 01 10到2014 02 09作為一組,將2014 02 10到2014 03 9作為一組。如果起始時間是2014 01 31,則將2014 02 27作為一組,將2014 02 28到2014 03 30作為一組。集算器 a1 根...

報表例子 用BIRT實現不規則月份統計

不規則月份統計 如果起始時間是2014 01 10,則將2014 01 10到2014 02 09作為一組,將2014 02 10到2014 03 9作為一組。如果起始時間是2014 01 31,則將2014 02 27作為一組,將2014 02 28到2014 03 30作為一組。集算器 a1 根...

Birt 如何實現不規則月份統計

集算器實現 birt 等報表工具中不規則月份統計 業務報表中,常常需要基於時間段進行分組統計,特別是按月份分組統計。一般情況如果按自然月就簡單了,但有時候也會需要按不規則月份來分組。例如,某企業從 1 月 16 日開始實行某種特殊的 策略或營銷活動,因此以後都想以每月 16 號為界來統計產品銷售情況...