1. 程式人生 > >報表開發思路之報表規則認定以及層次座標

報表開發思路之報表規則認定以及層次座標

第一節:擴充套件規則

    單元格進行擴充套件時,主單元格或同級別單元格被拉大成合並單元格,附屬單元格被動複製;上主格擴充套件時(橫向擴充套件),附屬格被橫向同步複製;左主格擴充套件時(縱向擴充套件),附屬單元格縱向被同步複製。

    擴充套件型別包含:橫向擴充套件、縱向擴充套件、不可擴充套件 三種類型;

    延伸擴充套件概念:跟隨擴充套件、多層擴充套件、交叉擴充套件

跟隨擴充套件:當一個單元格擴充套件時,它可以帶動其他單元格跟隨它一同擴充套件。

多層擴充套件:一個單元格可能既跟隨其他單元格擴充套件(做為其他單元格的附屬格),同時也自身擴充套件(做為另外單元格的主格)。

交叉擴充套件:同一報表中可能同時有縱向擴充套件格和橫向擴充套件格,如果它們的子格有重疊部分,則這些子格就既有左主格又有上主格,在擴充套件時會被既向下又向右複製,形成一片矩形單元格區域,從而做到交叉擴充套件。

例如下圖所示:

第二節:引用規則

    單元格擴充套件時,附屬單元格可以動態引用主單元格的值。隨著主單元格擴充套件,附屬單元格被複制到不同的新的位置,對主單元格的引用也相應的發生變化。

    例如:=A2*3  (其中 A2為擴充套件主格)

第三節:統計規則

    單元格擴充套件時,附屬單元格如採用預設的集合表示式,則預設統計所屬主格區域範圍內的所有的目標單元格的值  例如:SUM(C4{})

 第四節:主附規則

 1、左主格認定

    即跟隨著執行縱向擴充套件;左主格的認定是從當前單元格依次向左反推查詢。假設當前單元格為C2,左邊單元格為B2

     ① 當前單元格C2如果手工設定了左主格,則縱向擴充套件的左主格為C2設定的左主格值;

     ② 如果沒有設定縱向擴充套件的左主格,則檢查左邊的單元格B2是否為縱向擴充套件單元格,並且與C2在同一維度(行範圍內),如果是,則左邊的單元格B2就是當前單元格C2的左主格

     ③ 如果B2不是縱向擴充套件單元格,就繼續檢查B2前面的B1單元格;如果符合條件,則當前單元格的縱向擴充套件左主格為B1;否則繼續向前查詢;

     ④ 如果當前單元格前面的所有在同一維度範圍的單元格都不符合要求,則C2單元格的縱向擴充套件的左主格為根格(^0格)。

 2、上主格認定

    即跟隨著執行橫向擴充套件;上主格的認定是從當前單元格依次向上反推查詢。假設當前單元格為B4,上邊單元格為B3

     ① 當前單元格B4如果手工設定了上主格,則橫向擴充套件的上主格為B4設定的上主格值;

     ② 如果沒有設定橫向擴充套件的上主格,則檢查上邊的單元格B3是否為橫向擴充套件單元格,並且與B4在同一維度(列範圍內),如果是,則上邊的單元格B3就是當前單元格B4的上主格

     ③ 如果B3不是橫向擴充套件單元格,就繼續檢查B3上面的B2單元格;如果符合條件,則當前單元格的橫向擴充套件上主格為B2;否則繼續向上查詢;

     ④ 如果當前單元格上面的所有在同一維度範圍的單元格都不符合要求,則B4單元格的橫向擴充套件的上主格為根格(^0格)。

 3、附屬格認定

    附屬格即子格,附屬格與主格之間是相對關係,當某個單元格被設定可擴充套件屬性(橫向擴充套件、縱向擴充套件),則跟隨其一起執行橫向或者縱向複製擴充套件的單元格統稱為擴充套件格的附屬格(或子格);附屬格分直接附屬格和間接附屬格。

 第五節:關係規則

    附屬格(子格)的擴充套件屬性會隨著主單元格的擴充套件屬性變化,當單元格左側或上方相鄰的單元格具有擴充套件屬性時,單元格預設其左側相鄰單元格為其左主格,預設上方相鄰的單元格為其上主格。

  主附格之間的關係包括兩種:過濾關係和跟隨關係。

過濾關係

    過濾關係是指附屬格(子格)會預設將主格的資料作為過濾條件進行過濾,使主附格之間的資料能對應的顯示出來,但是這個預設的過濾關係只限於兩個單元格中的欄位來自於同一個資料集。

    注:過濾關係除了可以通過主附格預設新增之外,還可手動新增。

跟隨關係

    跟隨關係就是指附屬格(子格)會預設跟隨主格的擴充套件方向進行分組,即當前主格縱向擴充套件,子格跟隨主格預設縱向擴充套件;當主格橫向擴充套件,子格會跟隨主格橫向擴充套件分組;

 

層次座標

    在進行報表設計時,單元格尚未擴充套件,但是單元格的表示式往往需要對擴充套件後的單元格進行運算,例如,A1單元格擴充套件成A1-A5,如果某個單元格的值希望對擴充套件後的A2和A3進行求和,在擴充套件前,表示式很難描述這樣的關係,而對於擴充套件後單元格的唯一性的定義,就是單元格的層次座標。層次座標是實現複雜報表的一個重要功能。層次座標包含兩種型別:絕對座標(層次座標)、位移座標。

 

一、絕對座標

   在進行報表設計時,單元格尚未擴充套件,但是其它單元格的表示式可能需要此單元格擴充套件後的位置。這時,就要對擴充套件後的每個單元格進行唯一性定義,這就是單元格的層次座標。絕對座標(層次座標)是用於唯一描述(精確定位)擴充套件後的每一個單元格的表示式。

絕對座標語法:Cellx[absCoordinates] 左主格與上主格用分號隔開

絕對座標說明:

(1)、Lk 表示Cellx 目標單元格的左主格(LeftHeadCell)

(2)、Tk 表示Cellx 目標單元格的上主格(TopHeadCell)

(3)、Lk為Cellx的左主格,lk為左主格擴充套件後的次序,即擴充套件後的第幾個單元格,如果不指定lk或者lk為0,則表示當前表示式所在的單元格的所屬的當前左主格。Cellx為目標單元格,應該為Lk,Lk-1......L1的附屬單元格。 與之類似,Tk為Cellx的上主格,tk為上主格擴充套件後的次序。

(4)、如果只有上主格,沒有左主格,分號不能省略,即應該寫成如下的格式:Cellx[;Tk:tk,Tk-1:tk-1,......T1:t1]

(5)、如果只有左主格,沒有上主格,分號可以省略,即可以寫成如下格式:Cellx[Lk:lk,Lk-1:lk-1,......L1:l1]

(6)、Lk與Tk的次序是從遠到近的寫法;也就是說越是前面的上級主格越靠前。而找到絕對座標所表示的單元格的次序是從最上級的主格開始。

           舉例:層次座標C1[A1:2,B1:1],找到目標單元格C1的次序是:首先找到A1單元格擴充套件後的第2格(這裡假設為mA1),再次找到第二個A1單元格下面的B1單元格擴展出來的第一個B1單元格(這裡假設為mB1),然後根據當前單元格與獲取的mB1單元格所共同擁有的區域範圍的所有符合要求的C1目標單元格。

(7)、當前單元格概念:表示此表示式寫在哪個單元格中,就表示此單元格為當前單元格,

(8)、共同區域範圍:通過當前單元格(NowCell)與絕對座標定位到的某個單元格(absCell)兩者之間取交集範圍。即NowCell和absCell兩個單元格所共同擁有的主格所組成的區域範圍內取交集(兩者之間的共同的主格所限定的區域範圍)

(9)、最終在共同區域範圍內來查詢獲取符合條件的目標單元格Cellx出來;

(10)、完整的絕對座標表示式應該包括Cellx的所有主格。^0 根格可以省略。絕對座標的獲取與表示式寫在哪個單元格中有密切的關聯關係。

例項說明:

例1:C2單元格的公式:= C1[A1:3,B1:2]

公式的含義:表示取當前單元格C2與絕對座標定位到的單元格共同區域範圍內的目標單元格C1的值,左主格A1(相對於C1來講)縱向擴充套件的第三個,那就是圖片的單元格值為3的單元格;再查詢此下面B1單元格縱向擴充套件的第二個,也就是圖片上打勾前面的單元格值得為5的B1單元格,再求此打勾的前單元格值為5的單元格與當前單元格區域範圍內的目標C1單元格,那麼就是15。

上圖中:

    C1[A1:1,B1:2]的返回值為5;

    C1[A1:2,B1:3]的返回值為12;

    C1[A1:3,B1:4]的返回值為21;

    B1[A1:2,B1:2]的返回值為5;

    B1[A1:3,B1:4]的返回值為7;

 例2:在A1單元格中寫入相關獲取絕對座標表示式獲取相應的值

        在A1單元格中分別寫入如下四個座標,分別計算獲取值

      C3[A3:1,B3:2;C1:2,C2:3];

      C3[A3:3,B3:3;C1:1,C2:2];

      C3[A3:2,B3:1;C1:3,C2:2];

      C3[A3:3,B3:1;C1:3,C2:3];

通過對A1單元格寫入不同的絕對座標表示式,獲取的值和原理如下詳細描述:

C3[A3:1,B3:2;C1:2,C2:3]的返回值為216;

   左主格:A3擴充套件的第一個,B3擴充套件的第二個

   上主格:C1擴充套件的第二個,C2擴充套件的第三個

   最終精確定位到如圖片上標註的216單元格

C3[A3:3,B3:3;C1:1,C2:2]的返回值為255;

   左主格:A3擴充套件的第三個,B3擴充套件的第三個

   上主格:C1擴充套件的第一個,C2擴充套件的第二個

   最終精確定位到如圖片上標註的255單元格

C3[A3:2,B3:1;C1:3,C2:2]的返回值為228;

   左主格:A3擴充套件的第二個,B3擴充套件的第一個

   上主格:C1擴充套件的第三個,C2擴充套件的第二個

   最終精確定位到如圖片上標註的228單元格

C3[A3:3,B3:1;C1:3,C2:3]的返回值為248;

   左主格:A3擴充套件的第三個,B3擴充套件的第一個

   上主格:C1擴充套件的第三個,C2擴充套件的第三個

   最終精確定位到如圖片上標註的248單元格

 直接採用絕對座標的方法,一般獲取的是所有符合要求的目標單元格值的集合,最終顯示出來得結果會用分號隔開,所以一般會在前面加上sum、avg等函式在後面加入{} 集合符合。

 備註說明:針對絕對座標一般不常獨立使用,經常後面需要取集合求和平均值、排名等等。後續章節中詳細描述講解。此處主要介紹絕對座標的表示方法含義及獲取值的原理。

 二、位移座標

    很多時候,報表設計者並不知道目標單元格的具體位置,僅僅知道目標單元格相對於當前單元格的位移,這時就需要用到位移座標。位移座標是用來描述目標單元格和當前格之間的位置關係的表示式。
    位移座標語法:Cellx[relCoordinates] 左主格與上主格用分號隔開

位移座標說明:

(1)、Lk 表示Cellx 目標單元格的左主格(LeftHeadCell)

(2)、Tk 表示Cellx 目標單元格的上主格(TopHeadCell)

(3)、當前單元格:表示此表示式寫在哪個單元格中,計算到到此單元格的時候,此單元格就作為當前單元格物件。

(4)、+-符號:表示單元格的偏移量;向右向左或向下向上移動幾列或幾行左主格時: + 表示向下移動幾行,- 表示向上移動幾行;上主格時: + 表示向右移動幾列,- 表示向左移動幾列;

(5)、Lk為Cellx的左主格;lk為單元格的偏移量:即表示當前單元格所屬的主格Lk和目標單元格Cellx所屬的左主格Lk之間的偏移量,(也就是說當前單元格和目標單元格必須要有共同的左主格Lk單元格,否則取值為空);

            也就是說Lk為當前單元格的左主格所屬的Lk單元格(-)向上或(+)向下移動lk行所對應的Lk單元格(作為後續左主格的定位標準範圍)。如果不指定lk,則表示為當前單元格所在的左主格Lk, Cellx為目標單元格,一般為Lk,Lk-                1,......L1的附屬單元格。與之相似,Tk為Cellx的上主格,tk 為單元格的偏移量。

(6)、如果只有上主格,沒有左主格,分號不能省略,即應該寫成如下的格式: Cellx[;Tk:±tk,Tk-1:±tk-1,......T1:±t1]

(7)、如果只有左主格,沒有上主格,分號可以省略,即可以寫成如下格式:Cellx[Lk:±lk,Lk-1:±lk-1,......L1:±l1]

(8)、Lk與Tk的次序是從遠到近的寫法;也就是說離當前單元格最遠的主格開始的,也可以理解為從最高級別的主單元格開始。越是前面的上級主格越靠前。

      而找到位移座標所表示的主格單元格是從最上級的主格開始。

      舉例:位移座標C1[A1:+2,B1:-1,C1+4]

            每個節點都是首先跟當前單元格比較求出相應的左主格。

            例:A1:+2 找到當前單元格的左主格A1目標格;從此A1向下移動2行所對應的新的A1目標格,此新的A1目標格作為後續的左主格的區域範圍限定條件;此例中就作為下一個B1的範圍限定條件;

               B1:-1 找到當前單元格的左主格B1目標格,根據偏移量計算出擴充套件次序。再通過上一步A1分組範圍內B1單元格擴充套件次序==B1剛剛計算出來的次序;獲取到的新的目標格B1(左主格),此格繼續作為下一個的範圍判定條件。 C1+4 依次類推

(9)、共同區域範圍:通過當前單元格(NowCell)與位移座標定位到的某個主格 (relCell)兩者之間取交集範圍。即NowCell和relCell兩個單元格所共同擁有的主格所組成的區域範圍內取交集(兩者之間的共同的主格所限定的區域範圍)

(10)、最終在共同區域範圍內來查詢獲取符合條件的目標單元格Cellx出來;

(11)、完整的位移座標表示式應該包括Cellx的所有主格。^0 根格可以省略。

      位移座標的獲取與表示式寫在哪個單元格中有密切的關聯關係。 

    在報表中常常需要計算同期比、比上期之類的與時間相關的運算,而這些運算往往需要用到下一行的資料減上一行資料,後一列資料減去前一列資料等等,這種涉及行間、列間的元算,被稱為位移運算,相關的表示式被稱為位移表示式。

下面我們通過幾個例項對位移座標進一步進行說明和描述。

例項說明:

例1:在D1單元格中寫入位移座標獲取值;

如果位移座標表示式寫在圖示18的位置,那麼獲取的就是5;在擴充套件後的報表中,可以看出,D1~D9 是獲取不到資料的。

例2:通過下圖再次說明位移座標

C2[B2,A2]:表示當前格所在當前分組格B2和A2的共同覆蓋區域中的所有的C2單元格;

C2[B2:-1],A2:+1]: 表示當前格所在當前分組格B2之前偏移一個位置的B2分組格和當前格所在當前分組格A2之後偏移一個位置的A2分組格共同覆蓋區域中的所有C2單元格;

C2[-1]:表示離當前格最近的分組格之前偏移一個位置的分組格覆蓋區域中的C2單元格;

B2[B2,A2]=B2[B2:0,A2:0]=B2[B2:0,A2:0]=B2 都表示當前單元格。

&n