第一節:擴展規則
單元格進行擴展時,主單元格或同級別單元格被拉大成合並單元格,附屬單元格被動復制;上主格擴展時(橫向擴展),附屬格被橫向同步復制;左主格擴展時(縱向擴展),附屬單元格縱向被同步復制。
擴展類型包含:橫向擴展、縱向擴展、不可擴展 三種類型;
延伸擴展概念:跟隨擴展、多層擴展、交叉擴展
跟隨擴展:當一個單元格擴展時,它可以帶動其他單元格跟隨它一同擴展。
多層擴展:一個單元格可能既跟隨其他單元格擴展(做為其他單元格的附屬格),同時也自身擴展(做為另外單元格的主格)。
交叉擴展:同一報表中可能同時有縱向擴展格和橫向擴展格,如果它們的子格有重疊部分,則這些子格就既有左主格又有上主格,在擴展時會被既向下又向右復制,形成一片矩形單元格區域,從而做到交叉擴展。
例如下圖所示:
第二節:引用規則
單元格擴展時,附屬單元格可以動態引用主單元格的值。隨着主單元格擴展,附屬單元格被復制到不同的新的位置,對主單元格的引用也相應的發生變化。
例如:=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 都表示當前單元格。