FineReport

最強大的動態報表與BI商業智慧工具!

報表彌補資料庫不足(二)

上一篇當中我們闡述了在動態報表與
BI
商業智慧軟體報表當中如何list出一個連貫的月份,在實際的應用當中,還有一種情況需要使用補足的手段。

例如下面這張考勤表:

職工考勤表

可以看到這裡的日期部分是1到31號的一個list。而在報表當中有兩個參數,分別是讓用戶輸入年和月。而每個月的具體的天數又是根據月份不同的,所以需要根據不同的月份來顯示對應的天數。

所以這張表就需要一個稍微長一點的公式,作為list的結束數。在該公式當中要調用我們定義的年月參數,作為動態顯示天數的根據。

range(1,tointeger(mid(todate(CONCATENATE($year,”-”,tointeger($month)+1,”-”,1))-1,9,2)))
從最裡層開始解釋一下這個公式:$year,$month是我們在報表參數處定義好的參數名稱,類型都是字元串,即用戶要輸入的年和月。Tointeger是將字元串類型的數據轉換為日期,以便能夠在月份上面+1。

然後使用CONCATENATE()字元串拼接函數,將($year,”-”,tointeger($month)+1,”-”,1))中的四個字元拼成我們需要的日期格式,例如$year的值是2008,$month的值是3,那麼最終我們CONCATENATE($year,”-”,tointeger($month)+1,”-”,1)獲取到的是2008-4-1也就是根據輸入的參數,獲取到了該月份下一個月的第一天。

TODATE的作用,就是將我們拼出的日期,轉換為date類型,然後-1,得到的即是當前輸入月份的最後一天,例如輸入的是2008,3,那麼轉換之後得到的值就是2008-3-31。

繼續是MID函數,該函數和SUBSTR函數的功能相同,即從一個數據當中截取部分長度的字元,mid(todate(CONCATENATE($year,”-”,tointeger($month)+1,”-”,1))-1,9,2)返回的是上面的日期數據當中最後兩位數據,即31。

最後range函數是和list功能相同的一個函數,起始值我們設置的1,結束值根據輸入的月份不同。

然後下面的出勤數可以從資料庫中取,關聯的方法和上一章是相同的。

  • 聯繫我們

  • 電話:0933-790886
  • 邮箱:brian.wang@fanruan.com
  • 地址:300 新竹市學府路40號 (交大育成中心 R302)
  • 臉書粉絲團
Copyright©2017 Fanruan Software Co.,Ltd. All Rights Reserved. 帆軟軟體有限公司 | 蘇ICP備14031611號-8

返回頂部