反饋已提交

網絡繁忙

動態格間運算範例

1. 概述

線上視頻學習請查看:層次座標

如果公式很難理解,可以先學習層次座標的進階視頻,吃透公式的基本概念和使用方法:層次座標進階

1.1 應用場景

在學習了 層次座標 後,便可以將層次座標和公式函式結合,來進行動態格間運算,比如進行比較、佔比、環比、逐層累計、跨層累計、條件匯總等。

1.2 功能簡介

傳統報表工具,一般只提供同行內的格間運算和針對某組(或全體)的集合運算,會有如下幾種情況的不足:

  • 跨行運算,如:引用上一行資料,典型應用就是做累計比和環比。

  • 跨組運算,如:同期比等等,跨組則無能為力。 

  • 集合運算,只提供個別固定的函式,如:取第一名、算累計值等。

  • 無法組合出通用集合運算,如:取第二名、算累計的乘積等。

  • 某些帶條件的運算,如:統計同組資料中比當前數大的個數,也就是資料排名等。

FineReport 使用層次座標表達擴展儲存格的位置,很好地解決了以上動態格間運算的問題。

本文透過範例介紹如何使用層次座標書寫計算運算式來進行動態格間運算。

2. 範例一

2.1 預期效果

效果如下圖所示:

欄位名公式
比較

比較=本期應付金額-01月份的應付金額 

將儲存格擴展出的每個值與第一個值進行比較,範例中為求差值。

佔比

佔比=本期應付金額/所有月份應付金額

計算儲存格擴展出的每個值在總量中佔據的比例。

環比

計算每行資料與上一行資料的比率。

環比(發展速度)=本期應付金額/上期應付金額

2.2 資料準備

建立資料集 ds1,資料庫查詢對話框中寫入 SQL 查詢語句:

SELECT STRFTIME('%m',訂購日期) AS 月份,應付金額 

FROM 訂單 

WHERE STRFTIME('%Y',訂購日期)='2011'

如下圖所示:

2.3 報表設計

按照表格中的說明設計報表。

1)A1~E1 儲存格依次寫入欄位標題名:月份,應付金額,比較,佔比,環比。選中 A1~E1 儲存格,設定標題預定義樣式為 Head類型,如下圖所示:

2)將資料集中的資料列「月份」拖入到 A2 儲存格中,將資料集中的資料列「應付金額」拖入到 B2 儲存格中,並在「儲存格元素>資料設定」中對儲存格資料進行「匯總>求和」,如下圖所示:

3)在 C2 儲存格寫入公式 B2 - B2[A2:1],計算 B2 儲存格擴展出來的資料,每一行與第一行的差值,如下圖所示:

公式說明:公式解譯詳情參見:層次座標

公式說明
B2本期應付金額
B2[A2:1]01月份的應付金額,即傳回 A2 列的第一個數值對應的 B2 儲存格數值 
B2 - B2[A2:1]本期應付金額-01月份的應付金額

4)在 D2 儲存格寫入公式B2 / SUM(B2[!0]),計算 B2 儲存格擴展出來的資料,每一行在總值中的佔比,如下圖所示:

公式說明:

公式說明
B2本期應付金額
B2[!0]

傳回 B2 擴展出來的所有值,即3949.70,2293.65,2310.21,2116.69,1346.74,4780.93

詳情參見:層次座標常用公式

SUM(B2[!0])對傳回的所有 B2 值求和,也就是所有月份應付金額總計
B2 / SUM(B2[!0])計算每月應付金額佔總計額比重

5)在 E2 儲存格寫入公式IF(&A2 > 1, B2 / B2[A2:-1], 0),計算 B2 儲存格擴展出來的資料,每一行與上一行的比率,如下圖所示:

公式說明:

公式說明
&A2 獲取儲存格 A2 擴展後每個值對應的位置
B2 / B2[A2:-1]

B2[A2:-1]:傳回上一個月的應付金額

B2 / B2[A2:-1]:本月應付金額/上月應付金額

IF(&A2 > 1, B2 / B2[A2:-1], 0)如果不是序號為1 ,即第一個儲存格,則用,如果是第一個儲存格,則匯出 0

2.4 效果查看

2.4.1 PC 端

詳情參見本文 2.1 節。

2.4.2 行動端

App 與 HTML5 端效果相同,如下圖所示:

3. 範例二

3.1 預期效果

效果如下圖所示:

欄位名公式
逐層累計

按照年份分組,計算每一年月份應付金額的累加

分組報表中,每一組資料逐行累計。 

跨層累計

計算所有年月應付金額累加

分組報表中,所有資料逐行累計,跨組時接着上一組累計結果繼續累計。

條件匯總

對符合條件的資料進行匯總

3.2 資料準備

建立資料集 ds1,資料庫查詢對話框中寫入 SQL 查詢語句:

SELECT STRFTIME('%Y',訂購日期) AS 年份,STRFTIME('%m',訂購日期) AS 月份,應付金額

FROM 訂單

WHERE STRFTIME('%Y',訂購日期) IN ('2010','2011')

3.3 報表設計

按照表格中的說明設計報表。

儲存格操作
A1~E1儲存格依次寫入欄位標題名:年份,月份,應付金額,逐層累計,跨層累計。選中 A1~E1 儲存格,設定標題預定義樣式為Head類型
A2資料集中的資料列「年份」拖入到儲存格中
B2資料集中的資料列「月份」拖入到儲存格中
C2資料集中的資料列「應付金額」拖入到儲存格中,並在儲存格元素>資料設定中對儲存格資料進行匯總>求和
D2寫入公式C2 + D2[B2:-1],C2 儲存格擴展出來的資料按年份逐行累計
E2寫入公式IF(&B2 > 1, C2 + E2[B2:-1], C2 + E2[A2:-1,B2:!-1]),C2 儲存格擴展出來的資料逐行累計,跨年份時接着上一年份的累計結果繼續累計,其中B2:!-1表示是找該組B2列的倒數第1行,如果是B2:!-2就是倒數第2行
A3~C3合併 A3~C3 儲存格,寫入欄位標題名:應付金額大於2500的月份個數。設定左父格為 A2,標題預定義樣式為Head類型
D3~E3合併 D3~E3 儲存格,寫入公式COUNT(C2[!0]{A2=$A2 && C2>2500}),統計應付金額大於2500的月份個數

公式說明:

1)逐層累計:C2 + D2[B2:-1]

公式說明
D2[B2:-1]每次傳回當年逐層累計列的上一個數值
比如:2010年1月 傳回0;2010年2月傳回 1月份對應的 D2 的值 2837.94
C2 + D2[B2:-1]當前年月的應付金額+上一個逐層累計列儲存格數值

2)跨層累計:IF(&B2 > 1, C2 + E2[B2:-1], C2 + E2[A2:-1,B2:!-1])

公式說明
&B2獲取儲存格 B2 擴展後每個值對應的位置
注:B2 的位置根據左父格年份從頭累計

例如:2011年01月份 傳回的為 1 ;2010 年01月份 傳回的也為 1 

詳情參見:層次座標常用公式

E2[B2:-1]每次傳回當年逐層累計列的上一個數值

比如:2010年1月 傳回0;2010 年 2 月傳回 1月份對應的 E2 的值 2837.94

詳情參見:層次座標

E2[A2:-1,B2:!-1]對每年的01月份資料,都傳回上一年的最後一個月份的跨層累計資料
例如:2011年01月的跨層累計傳回 2010年06月的跨層累計資料 即 15631.50
IF(&B2 > 1, C2 + E2[B2:-1], C2 + E2[A2:-1,B2:!-1])如果不是每年的第一個月,則傳回當年逐層累計列的上一個數值+當月應付金額,如果是每年的第一個月,傳回上一年的最後一個月份的跨層累計資料+當月應付金額

3)條件匯總:COUNT(C2[!0]{A2=$A2 && C2>2500})

公式解譯詳情參見:層次座標常用公式

公式說明
A2=$A2

$A2 獲取儲存格 A2 擴展後對應位置上的值

然後判斷 A2 是否和 A2 擴展出去的值相等

即判斷是否在同一年,由於需求為分年統計

1606991784130277.png

A2=$A2 && C2>2500同時滿足在同一年內且每月應付金額大於2500
C2[!0]{A2=$A2 && C2>2500}

取同時滿足在同一年內,且每月應付金額大於2500的金額

比如:2010 年傳回的數值為 2837.94、3596.13、2822.19、2580.17

COUNT(C2[!0]{A2=$A2 && C2>2500})對傳回的應付金額計數

3.4 效果查看

3.4.1 PC 端

詳情參見本文 3.1 節。

3.4.2 行動端

App 與 HTML5 端效果相同,如下圖所示:

4. 範本下載

已完成範本可參見:%FR_HOME%\webroot\WEB-INF\reportlets\demotw\NewbieGuide\層次座標範例1.cpt

已完成範本可參見:%FR_HOME%\webroot\WEB-INF\reportlets\demotw\NewbieGuide\層次座標範例2.cpt

點選下載範本:層次座標範例1.cpt

點選下載範本:層次座標範例2.cpt

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙