如何透過動態引數實現週報製作

xiaohuihui發表於2019-12-17

需求描述

在貨品交易系統裡,使用者不僅要看當天的交易情況,還需要檢視一週 / 一個月 / 一年的情況,也叫做週報 / 月報 / 年報。下圖所示就是其中訂貨資訊週報的效果。
imagepng

它是如何根據使用者輸入的一個日期查詢出該日期所在周的訂貨資訊表的呢?

實現步驟

1、 引數配置

imagepng

其中,arg1 是使用者輸入的日期,對應普通引數;

arg2 是基於 arg1 計算得到的一週的起始日期,對應動態引數,表示式為:pdate@w(arg1);

arg2 是基於 arg1 計算得到的一週的結束日期,對應動態引數,表示式為:pdate@we(arg1);

每當有一個輸入日期傳入時,arg2 和 arg3 就會根據自己的表示式進行重新計算,得到對應的一週日期時間和結束時間這兩個值供資料集、報表計算使用。

PS:pdate 函式使用說明見文章末的附錄。

2、 資料集配置

ds1:

SELECT 訂單. 訂購日期, 訂單. 訂單 ID, 訂單. 貨主地區, 訂單. 貨主城市, 訂單. 運貨商 FROM 訂單 WHERE 訂單. 訂購日期 >?  AND  訂單. 訂購日期 <?

並新增兩個資料集引數引用:arg2 和 arg3。

ds2:

SELECT 運貨商. 公司名稱, 運貨商. 運貨商 ID FROM 運貨商

3、 報表單元格配置

imagepng

其中,

A2 單元格表示式為:=string(arg2)+“到”+string(arg3)+“訂貨單”

A4 單元格表示式為:=ds1.select(訂購日期),顯示格式為:yyyy 年 MM 月 dd 日

B4 單元格表示式為:=ds1. 訂單 ID

C4 單元格表示式為:=ds1. 貨主地區

D4 單元格表示式為:=ds1. 貨主城市

E4 單元格表示式為:=ds1. 運貨商,顯示值表示式為 ds2.select(公司名稱, 運貨商 ID==value(),1)

至此,就完成了週報的製作。

總結

週報實現的核心關鍵點在於如何獲取一週的起始時間和結束時間,在這個需求中,可以透過動態引數來計算:pdate() 函式。

附錄:

1、 動態引數和普通引數的區別:

普通引數是直接將輸入的引數值傳給報表進行運算的,而動態引數是一個表示式,報表運算時會先解析該表示式,然後將表示式計算出的結果作為引數值再傳給報表進行運算。

2、 pdate 函式使用說明:

函式說明:

獲得指定日期所在星期 / 月 / 季度的最早的一天和最後的一天

語法:

pdate(dateExp)

引數說明:

dateExp 返回值為日期或標準日期格式的表示式

返回值:

日期時間型

選項:

@w 獲得指定日期所在星期的星期天

@we 獲得指定日期所在星期的星期六

@m 取得指定日期所在月的月首

@me 取得指定日期所在月的月末

@q 取得指定日期所在季度的首日

@qe 取得指定日期所在季度的末日

預設為獲得指定日期所在星期的星期天

@y 獲取指定日期所在年的第一天

示例:

例 1:pdate@w(datetime(“19800227”,“yyyyMMdd”)) 1980-02-24

例 2:pdate@we (datetime(“19800227”,“yyyyMMdd”)) 1980-03-01

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2669022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章