介紹
本文檔是報表模型的數據模型部分,說明平臺報表中涉及的報表數據相關
術語
名稱 | 說明 |
數據源 | 數據源是與數據存儲的連接。支持數據源適配 |
數據集 | 定義報表數據來源的一個二維表 |
參數 | 報表往往有參數,例如,日報表,當我們希望生成一張日報表時,首先需要向報表傳遞日期參數,然后報表才會根據我們傳遞進去的日期參數,生成該日的日報表。 |
當前單元格 | 在進行單元格計算時,寫有表達式的單元格為當前單元格。條件表達式中有?單元格表達式都是以當前單元格為基準計算 |
目標單元格 | 表達式中返回單元格時,返回的單元格為目標單元格。條件表達式中單元格表達式都是以目標單元格為基準計算 |
參數 ? | 報表往往有參數,例如,日報表,當我們希望生成一張日報表時,首先需要向報表傳遞日期參數,然后報表才會根據我們傳遞進去的日期參數,生成該日的日報表。 |
宏 ? | 宏代表沒有數據類型的一個字符串,在報表運算時將用宏值替換宏變量所占的位置。可以在報表中任何位置引用宏變量,如單元格值、表達式、數據集定義、單元格屬性表達式中等,引用方法為%{宏變量名} |
表達式計算階段 | 表達式分為在擴展期間和分頁期間計算,和頁眉相關的表達式在分頁階段計算,如頁碼、頁數等。系統會對自動判斷表達式的計算階段 |
操作符
符號 | 說明 | 左操作數 | 右操作數 | 運算結果 | 示例說明 |
: | 到 | 單元格 | 單元格 | List 集合 | A1:D5 由A1和D5為兩個對角點圈起的矩形中的單元格集合,可以使用在sum,max 等聚集函數中作參數 |
in | 包含 | 數值 | List 集合 | 布爾值 | A1 in (1,2,3) 是否在集合中左右操作數均可為單值或數組,如? 1 in A1{00}[] 表示1是否存在00格下A1的擴展格子的值列表中 |
to | 到 | 整數 | 整數 | List 集合 | 1 to 5表示數組,等同于[1,2,3,4,5] |
. | 對象成員 | 數據表 | 字段 | 字段值 | RKD.RKDID表示表入庫單的ID字段 |
? | 參數表達式 | 單元格 | ? | 當前單元格值 | 單元格條件過濾時,用參數表達式來獲得當前單元格的值。 |
@ | 系統宏 | ? | ? | ? | @value表示當前單元格值,@row,@col表示當前單元格行列號,@DRow,@DCol表示設計期單元格行列,@pageIndex代表當前頁碼,@pageCount代表總頁數 |
表示日期類型,@為字符串第一個子目,其余為日期字符串 | 日期 | ? | 日期 | '@2000-1-1':表示2000年1月1日 | |
{} | 選擇條件表達式 | 字符串 | ? | ? | C5{A5:1}層次坐標中的條件表達式 |
[] | 集合 | 過濾條件以及排序或者數組位置 | ? | ? | [1,2,3,4]:表示一個元素為1,2,3,4 的數組 |
& | 取位置 | 主單元格 | ? | &A1 | 操作數必須為當前單元格的主格子,位置從1開始 |
% | 引用參數 | 參數標識 | ? | 參數數據類型 | 在元數據定義參數列表,%year表示外面傳入的年份參數 |
集合函數
其他
表格運算示例
當前單元格 | 表達式 | 應用場景 | 備注 |
B1 | A1+10 | 同級別單元格賦值,比如A1為表的一個字段,把B1設置成A1的值加10 | A1/B1為同級單元格 |
? | &A1 | 位置:序號 | A1為擴展單元格 |
? | ds1.id[type=B1] | 數據級函數的選擇條件,取type字段=B1的所有記錄的ID字段 | ? |
B2 | avg(B1[B1<60]) | 條件表達式,求不及格的平均分 | B1為成績 |
C3 | C2/sum(C2{00}[]) | 根坐標:占比運算 | 計算當前C2格占C2合計的百分比 |
? | Count(b2{00}[b2>$b2])+1 | 排名 | B2為數值單元格 |
? | D2/D2{A2:+0}[(?c2-1)==C2 and ?b2=B2) or ((?b2-1)=B2 and ?c2=4 and C2=10)] | 比上期 | ? |
? | D2/D2{B2:-1,C2:+0} | 比去年同期 | ? |
? | C2+D2{-1} | 累計金額 | C2為合同金額,D2為累計金額 |
約束
頁面宏
- 不能影響擴展過程:不能在集合表達式中使用
頁統計
- 頁統計表達式只統計單元格集合表達式
算法說明
單元格變量
- 如果沒有設置左主格和上主格,先查找目標單元格和當前單元格共同的左主格l和上主格t
- 如果左主格的源格為目標單元格,則返回左主格l;如果上主格的源格為目標單元格,則返回上主格t
- 如果左主格的源格L為目標單元格的直接左主格,在l單元格的附屬格中查找與目標單元格匹配的單元格c,如果單元格的上主格屬于t,則返回單元格c;上主格按左主格方法查找
- 如果左主格源格L是目標單元格的間接左主格,在l單元格的附屬格中查找是目標單元格的遞歸左主格的單元格c,然后把左主格設置為c再次調用步驟4直到滿足條件3而調用3獲取單元格值
單元格列表
- 查找目標單元格和當前單元格共同的左主格l和上主格t
- 如果左主格的源格為目標單元格,則返回左主格l;如果上主格的源格為目標單元格,則返回上主格t
- 如果左主格的源格L為目標單元格的直接左主格,在l單元格的附屬格中查找與目標單元格匹配的單元格c,如果單元格不是擴展格,并且上主格屬于t, 則返回單元格c,如果單元格c為擴展格,則查找c的ExtCells中的上主格屬于t的單元格列表;如果沒有符合條件的單元格,則按照3從上主格開始查找 并返回符合條件的單元格
如果左主格源格L是目標單元格的間接左主格,在l單元格的附屬格中查找是目標單元格的遞歸左主格的單元格c,然后把左主格設置為c再次調用步驟4直到滿足條件3而調用3獲取單元格列表
?
更多內容:? 報表引擎設計.pdf
?
歡迎轉載,轉載請注明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]