您好,登錄后才能下訂單哦!
數據庫中存儲的數據通常會有一些代碼值字段,如員工編號、部門代碼、類別 ID 等等,報表展示時如果直接展示代碼值形式,使用人員無法理解該值的具體含義,所以要求將編碼值轉換成對應的使用人員能夠理解的中文形式,又或者數據庫中存儲的出生日期是 date 形式,展現時要將其轉換成標準的 2018 年 12 月 12 日這種形式。下面通過一個例子的實際操作來介紹下這種需求的實現方法。
首先連接潤乾自帶的 demo 數據源,從“員工”表中取數制作一個員工信息表,報表模板如下圖:
此時點擊預覽,報表結果如下:
要求 :
1、 將出生日期轉換成標準的 yyyy 年 MM 月 dd 日格式
2、 將性別、學歷轉換成對應的中文形式
3、 將工資加上貨幣符號
報表單元格中支持顯示格式設置,直接對數據進行格式化操作,選中 C3 單元格,雙擊右側的顯示格式的值屬性,會彈出顯示格式設置對話框:
里邊有各類型格式設置,找到日期分類中的 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”表中取數,該表中數據如下:
可以看到,ID 中的數據就是員工表中學歷列的值,NAME 字段存儲的是對應的中文,這樣可以根據 ID 和 DEGREE 字段的關聯,取出需要的中文進行顯示,在 E3 單元格的顯示值表達式中寫入:ds2.select(NAME,ID==value(),1),該表達式含義為從 ds2 數據集中取出 ID 等于當前單元格值的 NAME 字段的值放到顯示值中顯示,注意后邊的 1 為取出滿足條件的第一條記錄,如果有滿足直接進行返回不再向后判斷,所以為提高報表計算效率,需要增加“1”的設置。這里用到了從另外一個數據集中取出對應的中文的寫法,實際使用中,如果字典表和數據表在同一個庫中,建議通過一個 sql 通過 where 關聯方式直接取出中文,這樣當數據量大時效率更高,如果數據來自不同庫,數據量大時導致計算較慢,可以通過集算器將兩個數據集 join 在一起返回到報表是一個數據集,這樣效率更高,具體看實際需求。
最后工資列設置顯示格式“¥#0.00”就行了,如圖:
最終報表展示效果如下:
本例中通過顯示格式和顯示值表達式的使用能夠控制單元格的顯示樣式,此時更改的只是單元格顯示效果,如果在其他單元格引用這些單元格的話,引用的還是報表單元格的原值,如果要引用顯示值,可以使用 disp() 函數。
顯示格式目前用到最多的是直接在顯示格式中選擇,實際上顯示格式支持表達式對其進行控制,比如某個單元格表達式為:=list(11,12.5345,14,15.66),這個單元格展示時既有浮點數,又有整數,好多客戶希望如果是整數則直接顯示整數, 如果是浮點數,則保留兩位小數顯示,這樣就用到了顯示格式表達式,如在該單元格的顯示格式表達式中寫入:if(value()==int(value()),“#”,“#0.00”),判斷該單元格的數值是否是整數,如果是則顯示格式為”#”, 否則顯示格式為”#0.00”, 該單元格預覽后效果如下:
可以看到報表屬性可以通過表達式進行動態控制,達到動態的顯示效果。
潤乾自帶了顯示格式,但有些格式可能無法滿足客戶的特殊需要,比如 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 函數將月轉換成想要的格式再拼接在一起,這樣就能夠實現特殊顯示格式的控制。
通過顯示格式能將數據進行格式話操作,通過顯示值能夠將單元格內的值換成其他值進行顯示而不影響原單元格的真實值,并且兩個屬性都可以通過表達式靈活設置,使得數據顯示設置真的靈活運用于各種需求之中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。