還在擔心報表不好做?不用怕,試試這個方法(三)

系列文章:

《還在擔心報表不好做?不用怕,試試這個方法》(一)

《還在擔心報表不好做?不用怕,試試這個方法》(二)

概要

在上一篇文章《還在擔心報表不好做?不用怕,試試這個方法》(二)中,小編介紹了模板語言中的的一些基本概念和用法,今天小編將繼續爲大家介紹如何不同字段間的父子關係,是如何在模板語言中定義的。

首先重新回顧一下,上一次使用到的數據表。如下所示:

可以看到,在數據表中,銷售公司和員工兩列數據擁有一個所屬關係。

因此在某些情況下,我們可以將員工按照所屬的公司關係進行分類,如下圖所示:

這樣就實現了一個基於數據間的主從關係的顯示佈局。

數據中的主從關係

在數據表中,剛提到了銷售公司與員工有一個所屬關係的存在,即數據本身存在邏輯關係。員工列的數據隸屬於某一個銷售公司。

同時,商品和商品類型,也有一個邏輯關係,商品隸屬於某一種商品類型。通常這種所屬或隸屬的關係,會被稱爲主從關係,或者父子關係。

爲了方便理解,這裏舉一個例子,讓您更好的理解這種包含,或者主從的關係。其本身更像是一種樹形結構,也有另一種說法,來稱呼這種關係,叫做“一對多”,1:N 的關係。

以國家爲例,一個國家,有多個省,每個省有多個市,每個市又有多個區,每個區又有多個街道。顯示出來就是:

國家 -> 省 -> 市 -> 區

這樣一來,國家和省,一對多,省對市,一對多。對於 1:N 的關係,通常我們會將【1】這一方稱之爲父或者主,將【N】一方稱之爲子或者從。

至此,我們已經瞭解到概要中提到的數據表,其中有兩個主從關係,即 公司:員工,類型:商品。

報表模板中的主從關係

介紹完數據中的主從關係之後,我們現在再看下面這個報表的圖片,我們可以看到 A 列綁定的是 “公司” 字段, C 列綁定的是 “員工” 字段。同時,A 列會將相同的數據合併成爲一個單元格。

基於上一篇文章《還在擔心報表不好做?不用怕,試試這個方法》(二)講到的數據綁定,我們做一個如下的模板。

生成的結果爲:

但是會發現這與期望的結果不同,A 列的數據雖然僅出現了一次,但是 A 列與 C 列數據間的關係丟失了,從行的角度看,數據是錯誤的。

因此爲了適應數據內部的主從關係,我們可以使用Context 屬性來實現,下面來介紹一下:

Context 屬性

Context的概念是可以爲一個單元格指定一個主單元格。Context 的簡寫是【C】,將模板改寫如下圖所示:

這樣生成的結果如下所示:

可以看到,Context 屬性爲 A 列和 C 列構建了一種主從關係。在生成報表時,其遵循如下原則:

  1. 先擴展主單元格,後擴展從單元格。
  2. 主單元格擴展的時候,需要複製從單元格,並調整主從關係。
  3. 從單元格獲取數據的時候要受主單元格的約束,擴展的時候要考慮調整主單元格的位置和大小。

隱式主從關係

在報表中,數據的主從關係非常普遍。因此,在數據綁定後,需要爲單元格指定主從關係的情況會很多。因此爲了使得模板看起來更簡潔,易讀。我們需要實現隱式主從關係的設計,也就是說當兩個單元格左右相鄰時,這兩個單元格會自動產生主從關係,且左邊爲主,右邊爲從。比如我們對模板進行如下修改時:

就會生成如下報表:

Range 屬性

前面介紹了Context 屬性和隱式主從關係,這兩個都是在主從單元格的角度指定主單元格。但是在某些場合,還是需要我們手工設置 Context,例如:

  1. 空單元格或常量單元格,由於本身沒有數據,不能擴展,不能隱式的成爲其它單元格的主單元格。
  2. 函數都是彙總函數,不具有擴展能力,也不能隱式成爲其它單元格的主單元格。

這一步可以使用 Range 屬性來解決這個問題。觀察下面這個模板,除了總銷量單元格,其它單元格都得顯示設置 Context,因爲它們左邊的單元格用的函數,不具有擴展性,所以沒有默認的主單元格。

通過使用 Range 屬性,則僅通過一個單元格來制定主從關係,模板修改後如下:

Range 屬性設置單元格時有以下規則:

  1. Range 的優先級是最低的,當有主從關係衝突時,Context 或者隱式主從關係優先級更高。
  2. 擴展方向相同的 Range 屬性擴展,可以嵌套,但不能出現交叉。當出現多個 Range 作用於同一個單元格時,即嵌套的情況,單元格將受到最內部的 Range 屬性影響。
  3. 不同擴展方向的 Range 則允許交叉,且能解決交叉報表的問題。

這樣根據上面的規則,我們就可以使用 Range 簡化模板,如下例子:

通過爲 A3 和 D1 設置 Range 屬性,就可以輕鬆的給 B3,C3,D3,E3 指定了主單元格。

總結

本章主要對模板語言中數據和單元格之間主從關係進行講解,本章的主要內容如下:

  • 數據中的主從關係
  • 報表模板中的主從關係
  • Context 屬性
  • 隱式主從關係
  • Range 屬性

下一期,小編將爲大家介紹數據展開等其他設置是如何在模板中使用的。

擴展鏈接:

輕鬆構建低代碼工作流程:簡化繁瑣任務的利器

數據驅動創新:以Java編程方式定製數據透視表

Java批量操作Excel文件實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章