1. 程式人生 > >資料顯示格式設定那些事

資料顯示格式設定那些事

資料庫中儲存的資料通常會有一些程式碼值欄位,如員工編號、部門程式碼、類別 ID 等等,報表展示時如果直接展示程式碼值形式,使用人員無法理解該值的具體含義,所以要求將編碼值轉換成對應的使用人員能夠理解的中文形式,又或者資料庫中儲存的出生日期是 date 形式,展現時要將其轉換成標準的 2018 年 12 月 12 日這種形式。下面通過一個例子的實際操作來介紹下這種需求的實現方法。

首先連線潤乾自帶的 demo 資料來源,從“員工”表中取數製作一個員工資訊表,報表模板如下圖:

1jpg

此時點選預覽,報表結果如下:

2jpg

要求

1、 將出生日期轉換成標準的 yyyy 年 MM 月 dd 日格式

2、 將性別、學歷轉換成對應的中文形式

3、 將工資加上貨幣符號

日期格式設定

報表單元格中支援顯示格式設定,直接對資料進行格式化操作,選中 C3 單元格,雙擊右側的顯示格式的值屬性,會彈出顯示格式設定對話方塊:

3jpg

裡邊有各型別格式設定,找到日期分類中的 yyyy 年 MM 月 dd 日,點選確定,這樣,出生日期列就能按照想要的格式效果展示。

數值轉中文

接下來看下性別和學歷設定,性別比較固定,一般就是“男”或者“女”,針對此種比較固定的,可以在顯示值表示式中的 if 函式進行控制,在 D4 單元格的顯示值表示式中寫入:if(value()==1,“男”,“女”),value() 函式是報表自帶的一個函式,用於獲取當前單元格的真實值,通過判斷當前單元格為 1 時,返回顯示值“男”,否則顯示“女”,注意:value()==1,性別欄位在資料庫中是整數,所以此處直接寫 1,如果是字串,需要寫成”1”,要注意資料型別,如果有多種型別,可以做 if 巢狀,具體可以參考報表函式說明。針對此種資料比較固定的,還有一個函式可以實現:map 函式,也可以在 D4 單元格的顯示值表示式中寫入:map(list(1,2),list(“男”,“女”)),第一個 list 中列出的是單元格內真實值的列表,第二個 list 會進行顯示值的對映。

學歷單元格設定和性別有些類似,都要通過顯示值表示式進行設定,可以使用 if 或 map 函式,但是學歷資料會較多,需要寫入大量的表示式,並且學歷在資料庫中可能是會變化的,比如過段時間會增加個新學歷,還要再次修改報表,針對此種形式,資料庫中通常會有中文字典表。在報表中新增資料集,從“DEGREE”表中取數,該表中資料如下:

4jpg

可以看到,ID 中的資料就是員工表中學歷列的值,NAME 欄位儲存的是對應的中文,這樣可以根據 ID 和 DEGREE 欄位的關聯,取出需要的中文進行顯示,在 E3 單元格的顯示值表示式中寫入:ds2.select(NAME,ID==value(),1),該表示式含義為從 ds2 資料集中取出 ID 等於當前單元格值的 NAME 欄位的值放到顯示值中顯示,注意後邊的 1 為取出滿足條件的第一條記錄,如果有滿足直接進行返回不再向後判斷,所以為提高報表計算效率,需要增加“1”的設定。這裡用到了從另外一個數據集中取出對應的中文的寫法,實際使用中,如果字典表和資料表在同一個庫中,建議通過一個 sql 通過 where 關聯方式直接取出中文,這樣當資料量大時效率更高,如果資料來自不同庫,資料量大時導致計算較慢,可以通過集算器將兩個資料集 join 在一起返回到報表是一個數據集,這樣效率更高,具體看實際需求。

貨幣格式

最後工資列設定顯示格式“¥#0.00”就行了,如圖:

5jpg

最終報表展示效果如下:

6jpg

本例中通過顯示格式和顯示值表示式的使用能夠控制單元格的顯示樣式,此時更改的只是單元格顯示效果,如果在其他單元格引用這些單元格的話,引用的還是報表單元格的原值,如果要引用顯示值,可以使用 disp() 函式。

顯示格式表示式控制

顯示格式目前用到最多的是直接在顯示格式中選擇,實際上顯示格式支援表示式對其進行控制,比如某個單元格表示式為:=list(11,12.5345,14,15.66),這個單元格展示時既有浮點數,又有整數,好多客戶希望如果是整數則直接顯示整數, 如果是浮點數,則保留兩位小數顯示,這樣就用到了顯示格式表示式,如在該單元格的顯示格式表示式中寫入:if(value()==int(value()),“#”,“#0.00”),判斷該單元格的數值是否是整數,如果是則顯示格式為”#”, 否則顯示格式為”#0.00”, 該單元格預覽後效果如下:

7jpg

可以看到報表屬性可以通過表示式進行動態控制,達到動態的顯示效果。

顯示值實現特殊格式

潤乾自帶了顯示格式,但有些格式可能無法滿足客戶的特殊需要,比如 2018-11-30 這種日期格式需要顯示成:30 Nov. 2018,此時可以使用顯示值表示式進行特殊設定,比如 B2 單元格為日期,則在 B2 單元格顯示值表示式中寫入:string(day(value()))+"
“+case(string(month(value())),“1”:“Jan.”;“2”:“Feb.”;“3”:“Mar.”;“4”:“Apr.”;“5”:” May.“;“6”:“Jun.”;“7”:“Jul.”;“8”:“Aug.”;“9”:“Sept.”;“10”:“Oct.”;“11”:“Nov.”;“12”:“Dec.”)+” "+string(year(value()))

該表示式先通過潤乾函式分別擷取日期中的日、月、年,然後通過 case 函式將月轉換成想要的格式再拼接在一起,這樣就能夠實現特殊顯示格式的控制。

總結

通過顯示格式能將資料進行格式話操作,通過顯示值能夠將單元格內的值換成其他值進行顯示而不影響原單元格的真實值,並且兩個屬性都可以通過表示式靈活設定,使得資料顯示設定真的靈活運用於各種需求之中。