เกือบทุกส่วนของโครงสร้างแบบไบนารีดั้งเดิมของ Excel จะจัดเก็บในรูปเรกคอร์ดเดี่ยว ๆ ที่ระบุประเภทข้อมูลขนาดสองไบต์และความยาวสองไบต์อย่างสะอาดสะอ้าน ช่องเซลล์หนึ่งช่องจะเก็บเป็นเรกคอร์ด LABELSST หรือ NUMBER ขอบเขตเซลล์ผสานจะเก็บเป็นเรกคอร์ด MERGEDCELLS คุณสามารถเปิดอ่านข้อมูลแผ่นงานส่วนใหญ่ได้โดยการไล่ผ่านเรกคอร์ดทีละเรกคอร์ดและประมวลผลตามคำระบุประเภทข้อมูล แต่ PivotTable ทำลายลำดับการอ่านปกตินี้ลงทั้งหมด ตาราง PivotTable หนึ่งตารางไม่ได้เก็บในรูปเรกคอร์ดตัวเดียว แต่มันทำหน้าที่เสมือนโปรแกรมขนาดเล็กที่เกิดจากความร่วมมือกันของเรกคอร์ดหลายสิบรายการที่กระจัดกระจายอยู่ในสองตำแหน่งที่แตกต่างกันภายใต้โครงสร้างไฟล์สตรีม OLE compound เดียวกัน และความสัมพันธ์ระหว่างเรกคอร์ดเหล่านั้นขึ้นอยู่กับพิกัดข้อมูล การบีบอัดระดับบิต (bit-packed) และมีความเปราะบางสูงมาก นี่คือโครงสร้างที่โปรแกรมอ่านไฟล์ BIFF8 ส่วนใหญ่มักจะเลือกข้ามไปเลยหรือเก็บไว้ในรูปข้อมูลไบต์ดิบที่ไม่มีการวิเคราะห์รายละเอียด เนื่องจากกระบวนการสร้าง PivotTable ขึ้นมาใหม่ทั้งหมดหมายถึงการจำลองพิกัดความสัมพันธ์และการอ้างอิงไขว้ทุกจุดที่ Excel ใช้ควบคุมดูแล
สาเหตุที่ PivotTable จัดการได้ยากเป็นเพราะมันประกอบด้วยสองส่วนที่ถูกหลอมรวมเข้าด้วยกัน ส่วนแรกคือแคชพีวอต (pivot cache) ซึ่งทำหน้าที่เป็นข้อมูลภาพรวม (snapshot) ของข้อมูลแหล่งต้นฉบับแยกอิสระภายใต้สตรีมย่อยของมันเอง และส่วนที่สองคือมุมมองตาราง (table view) ซึ่งทำหน้าที่วางเลย์เอาต์กำหนดฟิลด์ข้อมูลให้อยู่ในแต่ละแกน แคชพีวอตและมุมมองตารางจะอ้างอิงข้อมูลระหว่างกันผ่านค่าดัชนี หากระบุค่าดัชนีผิดพลาดแม้เพียงจุดเดียว ไฟล์ที่เปิดออกมาจะแสดงข้อความแสดงความล้มเหลวในการรีเฟรชข้อมูล หรือแสดงเป็นตารางเปล่าอย่างเงียบเชียบ
แคชพีวอตมีสตรีมย่อยแยกต่างหากของตนเอง
แคชพีวอตจะอยู่ในสตรีมข้อมูลส่วนกลางของเวิร์กบุ๊ก (workbook globals stream) ในรูปแบบสตรีมย่อย BIFF ที่สมบูรณ์ โดยมีเรกคอร์ด BOF ทำหน้าที่ล้อมกรอบซึ่งระบุประเภทเอกสารเป็น 0x0006 (ซึ่งเป็นค่าระบุแคชพีวอต แตกต่างจากรหัส 0x0005 สำหรับตัวเวิร์กบุ๊ก หรือรหัส 0x0010 สำหรับตัวแผ่นงานแผ่นย่อย) และปิดท้ายด้วยเรกคอร์ด EOF ภายใต้กรอบการทำงานนี้ โครงสร้างจะถูกตรึงคงที่ เรกคอร์ด SXDB คือส่วนหัวของแคชพีวอต มันจะระบุจำนวนเรกคอร์ด จำนวนฟิลด์แคช และตัวระบุสตรีมที่ตัวมุมมองตารางจะนำไปใช้อ้างอิงเพื่อผูกการทำงานเข้ากับแคชพีวอตนี้ หลังจากนั้น แต่ละคอลัมน์ของแหล่งข้อมูลจะนำส่งเรกคอร์ดคำจำกัดความฟิลด์ SXFDB และตามด้วยรายการ SXFDBType เพื่อจำแนกประเภทข้อมูล จากนั้นจึงส่งออกข้อมูลค่าไม่ซ้ำในคอลัมน์นั้น ๆ โดยเขียนเป็นเรกคอร์ดไอเท็มที่จำแนกประเภทข้อมูลต่อหนึ่งค่าที่ไม่ซ้ำกัน
เรกคอร์ดไอเท็มเป็นส่วนที่แคชพีวอตนำมาใช้งานจริง ค่าข้อความจะเปลี่ยนเป็น SXSTRING ค่าตัวเลขเป็น SXNUM ค่าตรรกะเป็น SXBOOLEAN และค่าข้อผิดพลาดสูตรเป็น SXERR ตัวแคชไม่ได้เก็บข้อมูลตารางต้นฉบับทั้งหมด แต่มันเก็บข้อมูลเฉพาะค่าที่ไม่ซ้ำกันในแต่ละฟิลด์ ควบคู่ไปกับตารางดัชนีเพื่อระบุว่า สำหรับเรกคอร์ดที่ n นั้น ฟิลด์แต่ละตัวเลือกใช้ค่าไม่ซ้ำค่าใด นี่เป็นเหตุผลที่การสร้าง PivotTable ด้วยโค้ดโปรแกรมไม่ใช่เรื่องของการคัดลอกเซลล์ข้อมูลดื้อ ๆ คุณจำเป็นต้องเขียนโค้ดไล่อ่านขอบเขตข้อมูลต้นฉบับ ตีความประเภทข้อมูลของแต่ละฟิลด์จากค่าที่เก็บอยู่ นำค่าเหล่านั้นมาลบตัวซ้ำออกเพื่อให้ได้รายการไอเท็มไม่ซ้ำ และบันทึกแถวข้อมูลแต่ละแถวในลักษณะความสัมพันธ์ดัชนีไอเท็ม ยูนิต HotXLS จัดการเรื่องนี้โดยอัตโนมัติ: คอลัมน์ที่มีเฉพาะตัวเลขจะถูกส่งออกในฐานะไอเท็ม SXNUM คอลัมน์ที่มีข้อความปนตัวเลขจะเก็บเป็นไอเท็ม SXSTRING และข้อมูลวันที่ระบุเป็นค่าตัวเลขลำดับผ่านทางพาธตัวเลขเดียวกัน
SXDBB และการบีบอัดข้อมูลบิตที่เพิ่มความน่าสนใจ
ตารางดัชนีของแต่ละเรกคอร์ดถือเป็นส่วนที่มีความน่าสนใจและท้าทายในเชิงเทคนิคที่สุดของโครงสร้าง และมันบันทึกอยู่ในเรกคอร์ด SXDBB วิธีการเข้ารหัสแบบทั่วไปจะเลือกเก็บค่าดัชนีของฟิลด์แต่ละตัวในรูปแบบข้อมูลขนาด 16 บิต แต่ Excel ไม่ได้เลือกใช้วิธีนั้น มันจะทำการบีบอัดค่าดัชนีของแต่ละฟิลด์ให้มีขนาดความกว้างบิตเท่าที่จำเป็นต้องใช้ในการระบุข้อมูลไอเท็มของฟิลด์นั้น ๆ เท่านั้น โดยไม่มีขนาดบิตส่วนเกิน ความกว้างคำนวณจากสมการ ceil(log2(itemCount + 1)) บิต ค่า + 1 มีความสำคัญมาก: ตัวเลขที่เพิ่มขึ้นนี้คือตัวแจ้งเตือนที่ระบุว่า "ว่าง (blank) หรือไม่มีการกำหนดค่าฟิลด์นี้ในเรกคอร์ดนี้" ดังนั้นฟิลด์ที่มีไอเท็มไม่ซ้ำกันสามตัวจำเป็นต้องระบุสภาวะทั้งหมดสี่สภาวะ จึงต้องใช้ขนาดข้อมูลสองบิตแทนที่จะเป็นหนึ่งบิตที่ขนาดข้อมูลไม่ซ้ำสามตัวอ้างว่าใช้งาน ส่วนฟิลด์ข้อมูลที่ไม่มีไอเท็มเลยจะใช้ขนาดศูนย์บิตและถูกข้ามไปทั้งหมดในขั้นตอนบีบอัด
ข้อมูลบิตสำหรับเรกคอร์ดหนึ่งชุดจะถูกนำมาเชื่อมต่อยาวกันไปในทุกฟิลด์ และเรกคอร์ดถัดไปจะเริ่มต้นบนขอบเขตไบต์ใหม่ เรกคอร์ดจะถูกจัดตำแหน่งแบบอ้างอิงไบต์ (byte-aligned) ไม่ใช่บีบอัดบิตยาวต่อกันตั้งแต่ต้นจนจบไฟล์ วิธีการนี้ช่วยให้ระบบเข้าถึงข้อมูลแบบสุ่ม (random access) ในตารางทำงานได้อย่างมีประสิทธิภาพโดยแลกกับการสูญเสียบิตเติมเต็ม (padding bits) เล็กน้อยในแต่ละแถว การบีบอัดข้อมูลบิตภายในไบต์จะยึดหลักบิตที่มีนัยสำคัญต่ำสุดขึ้นก่อน (least-significant-bit first) เมื่อยอมรับกฎเกณฑ์สองข้อนี้แล้ว ตัวเข้ารหัสจะทำหน้าที่เปรียบเสมือนปั๊มส่งข้อมูลบิตธรรมดา และตัวถอดรหัสก็ทำงานเป็นกระจกสะท้อนพฤติกรรมนั้น
// Width of one field's index in the SXDBB stream.
// citmTotal distinct items need ceil(log2(citmTotal + 1)) bits,
// the +1 reserving a "blank" sentinel value.
function BitsForFieldItems(itemCount: Integer): Integer;
var
capacity: Integer;
begin
Result := 0;
if itemCount <= 0 then
Exit; // empty field contributes zero bits
Result := 1;
capacity := 2;
while capacity < itemCount + 1 do
begin
Inc(Result);
capacity := capacity * 2;
end;
end;
สาเหตุที่ปัญหานี้ละเลยไม่ได้เพราะขีดจำกัดเพดานสูงสุด 8224 ไบต์สำหรับหนึ่งเรกคอร์ด BIFF เรกคอร์ดทุกตัวในรูปแบบไฟล์นี้ (รวมถึงเรกคอร์ดของตารางพีวอตด้วย) จะต้องเก็บข้อมูลเนื้อหารวมกันไม่เกิน 8224 ไบต์ และข้อมูลแคชพีวอตที่ทำงานหนักซึ่งเก็บแถวข้อมูลนับพันแถวจะวิ่งทะลุขีดจำกัดนั้นอย่างรวดเร็วก่อนที่จะเขียนแถวข้อมูลเสร็จสิ้น ดังนั้นตารางดัชนีจึงจำเป็นต้องถูกแบ่งพาร์ท ยูนิต HotXLS จะจำกัดเนื้อหาของ SXDBB แต่ละบล็อกไว้ไม่เกิน 8220 ไบต์ ซึ่งได้มาจากระดับจำกัด 8224 ไบต์ลบข้อมูลส่วนหัวของเรกคอร์ดประเภทและความยาวสี่ไบต์ออก แล้วนำไปหารด้วยความกว้างไบต์ของหนึ่งเรกคอร์ดที่บีบอัดแล้วเพื่อคำนวณจำนวนแถวข้อมูลที่สามารถจัดเก็บได้พอดี และส่งออกเรกคอร์ด SXDBB ต่อเนื่องตามความต้องการของจำนวนแถว เรกคอร์ดต่อเนื่องแต่ละส่วนจะเริ่มต้นใหม่อย่างหมดจดบนขอบเขตเรกคอร์ด แถวข้อมูลจึงไม่มีทางขาดครึ่งระหว่างสองเรกคอร์ด โปรแกรมอ่านที่ทราบความกว้างบิตต่อเรกคอร์ดจะสามารถก้าวผ่านเรกคอร์ด SXDBB แต่ละตัวตามลำดับได้เสมือนอ่านอาร์เรย์บิตต่อเนื่องเส้นเดียว
เลย์เอาต์มุมมอง: SXLI สำหรับตัวตาราง และ SXPI สำหรับหน้าตัวกรอง
เมื่อระบบสร้างแคชเสร็จแล้ว มุมมองตารางจะเป็นงานส่วนที่สอง แกนหลักของมันคือรายการเส้นพิกัด (axis line items) ซึ่งก็คือแถวข้อมูลในส่วนตัวตารางพีวอตที่จะคำนวณข้อมูลจับคู่กันระหว่างฟิลด์แถวและฟิลด์คอลัมน์ที่ตัวตารางวาดแสดงผล ข้อมูลเหล่านี้จัดเก็บอยู่ในเรกคอร์ด SXLI (ประเภทเรกคอร์ด 0x00B5 ตามอธิบายในเอกสาร [MS-XLS] §2.4.275) เรกคอร์ด SXLI หนึ่งตัวเก็บข้อมูลเส้นพิกัดได้หลายเส้น จนกระทั่งขีดจำกัด 8224 ไบต์สั่งให้ขยายเรกคอร์ดตัวถัดไป และมันใช้เทคนิคบีบอัดข้อมูลขนาดเล็ก: โดยแต่ละเส้นพิกัดจะบันทึกเฉพาะความต่างจากเส้นพิกัดก่อนหน้าด้านบน อธิบายในรูปจำนวนนำหน้าส่วนร่วม (common-prefix count) แกนที่มีข้อมูลซ้อนกันอยู่ลึก ๆ จึงไม่ต้องเขียนข้อมูลฟิลด์ภายนอกซ้ำในทุก ๆ แถว เส้นพิกัดยอดรวม (grand-total) และเส้นพิกัดบรรทัดแรกสุดของเรกคอร์ดใด ๆ จะกำหนดค่าส่วนร่วมเริ่มต้นเป็นศูนย์เสมอ เพื่อให้โปรแกรมอ่านไม่จำเป็นต้องสืบค้นย้อนกลับข้ามขอบเขตเรกคอร์ดเพื่อสร้างพิกัดใหม่
แกนตัวกรอง (page axis) หรือเมนูดรอปดาวน์สำหรับกรองข้อมูลที่อยู่ด้านบนของตาราง PivotTable จะบันทึกอยู่ในเรกคอร์ดแยกเฉพาะ เรกคอร์ด SXPI (ประเภทเรกคอร์ด 0x00B6 ตามเอกสาร [MS-XLS] §2.4.276) จะเก็บข้อมูลขนาดสิบไบต์ต่อหนึ่งฟิลด์ตัวกรอง: ประกอบด้วยดัชนีฟิลด์พีวอต isxvd ไอเท็มแคชที่ถูกเลือก iCache คำระบุตำแหน่ง ipos และไอดีอ็อบเจกต์ระบบเก่า objId ค่าของ iCache คือจุดที่ต้องคอยสังเกต ฟิลด์ตัวกรองที่แสดงคำว่า "(All)" ซึ่งไม่มีการกรองข้อมูลใด ๆ จะจัดเก็บค่า sentinel 0x7FFD แทนที่จะเป็นค่าดัชนีไอเท็มจริง ตารางพีวอตที่สร้างขึ้นจากโค้ดโปรแกรมจะเปิดขึ้นมาพร้อมตัวเลือกของฟิลด์ตัวกรองทุกตัวตั้งเป็น "(All)" เสมอ จนกระทั่งผู้เรียกใช้ทำการเลือกไอเท็มเฉพาะเจาะจงล่วงหน้า ซึ่ง ณ จุดนั้นดัชนีแคชของไอเท็มนั้นจะเข้าไปแทนที่ค่า sentinel และทำให้ Excel เปิดไฟล์ขึ้นมาโดยที่ตัวกรองถูกเรียกใช้งานไว้แล้ว เคียงข้างเรกคอร์ดเหล่านี้คือกลุ่มเรกคอร์ดสนับสนุนที่อธิบายรายละเอียดของแต่ละฟิลด์และการจัดรูปแบบ ได้แก่ เรกคอร์ด SXVD และ SXVDEx สำหรับคำนิยามมุมมองฟิลด์ เรกคอร์ด SXIVD สำหรับรายการดัชนีฟิลด์ที่ใช้จัดเรียงลำดับแกน และเรกคอร์ด SXFormat สำหรับระบุรูปแบบตัวเลข ซึ่งแต่ละตัวจะทำหน้าที่อ้างอิงดัชนีย้อนกลับไปยังแคชพีวอตเดียวกันกับที่เส้นพิกัดตัวตารางอ้างอิงอยู่
การเขียนสองระบบในตัวเดียว: ข้อมูลบล็อกดิบและโมเดลที่กำหนดประเภท
มีเหตุผลเชิงโครงสร้างที่ยูนิต HotXLS ต้องเก็บรักษาพาธการเขียนตาราง PivotTable แยกต่างหากสองระบบด้วยกัน ซึ่งมาจากความต้องการรักษาความถูกต้องสมบูรณ์ของเอกสารเป็นหลัก เมื่อเราอ่านเวิร์กบุ๊กจากดิสก์ เรกคอร์ดพีวอตเหล่านั้นอาจถูกเขียนขึ้นโดย Excel หรือระบบสร้างอื่น ๆ ซึ่งอาจมีการใช้เรกคอร์ดรุ่นปรับปรุง การเรียงลำดับที่คลาดเคลื่อนเฉพาะตัว หรือเรกคอร์ดส่วนขยายที่ไม่มีระบบตัวเขียนภายนอกค่ายใดสามารถจำลองโครงสร้างได้สมบูรณ์ สิ่งเดียวที่ปลอดภัยที่สุดที่จะดำเนินการกับข้อมูลไบต์เหล่านั้นคือการส่งคืนค่าข้อมูลเดิมกลับไปโดยไม่มีการแก้ไข ดังนั้น ตาราง PivotTable ที่ดึงมาจากไฟล์ต้นฉบับจะถูกตั้งค่าแฟล็ก FromRawBlobs = True และเมื่อสั่งบันทึก ตัวเขียนจะเขียนเรกคอร์ดบล็อกที่เก็บรักษาไว้กลับลงไปในรูปแบบเดิมทุกประการ ไม่มีการสร้างเนื้อหาใหม่ ไม่มีการตีความค่าใหม่ และการแปลงไฟล์ย้อนกลับ (round-trip) ผ่านการเปิดและบันทึกจะมีความถูกต้องระดับเสถียรภาพไบต์ต่อไบต์
ตาราง PivotTable ที่สร้างขึ้นจากโค้ดโปรแกรมจะเป็นกรณีในทิศตรงกันข้าม เนื่องจากไม่มีข้อมูลไบต์ต้นฉบับให้เก็บรักษา มีเพียงโครงสร้างโมเดลอ็อบเจกต์ที่ระบุประเภทเท่านั้น: ประกอบด้วย TXLSPivotCache ที่มีรายการฟิลด์และไอเท็ม และ TXLSPivotTable ที่ระบุหน้าที่ในแต่ละแกน ตารางพีวอตลักษณะนี้จะตั้งค่าแฟล็ก FromRawBlobs = False และตัวเขียนจะทำหน้าที่แปลงข้อมูลเป็นอนุกรมด้วยขั้นตอนดั้งเดิมทั้งหมด โดยจะส่งออกสตรีมย่อยแคชพีวอต BOF = 0x0006 ชุดใหม่ บีบอัดข้อมูลลงตารางดัชนี SXDBB จากดัชนีไอเท็มที่โมเดลถือครอง และจัดเรียงเรกคอร์ด SXLI และ SXPI ตามค่าติดตั้งของแกน ตัวแฟล็กนี้คือสิ่งที่ช่วยให้การประมวลผลตารางพีวอตทั้งสองประเภทสามารถอยู่ร่วมกันได้ในเวิร์กบุ๊กเดียวกัน หากไม่มีฟังก์ชันนี้ ตัวเขียนตัวเดียวก็จำเป็นต้องเลือกระหว่างการตัดเนื้อหาเฉพาะตัวของตารางเดิมทิ้ง หรือเลือกที่จะปฏิเสธไม่ยอมสร้างตารางใหม่ขึ้นมาเลย เรกคอร์ดส่วนขยายเฉพาะของผู้ผลิตใด ๆ ที่ตารางเดิมขนเข้ามาด้วยจะถูกเก็บรักษาไว้เป็นเรกคอร์ดเสริม (supplemental records) ซึ่งสามารถเรียกเข้าถึงได้ผ่านรายการ SupplementalRecords ของตาราง ดังนั้นตารางที่ถูกเรียกตรวจสอบผ่านโมเดลอ็อบเจกต์จะไม่สูญเสียส่วนประกอบย่อยอื่น ๆ ที่ตัวโมเดลไม่ได้ระบุรายละเอียดเอาไว้
การสร้างตาราง PivotTable ด้วยโค้ดโปรแกรม
กลไกการทำงานทั้งหมดที่ระบุข้างต้นทำงานอยู่เบื้องหลังคำสั่งเรียกเพียงคำสั่งเดียว เมธอด AddPivotTable จะรับขอบเขตข้อมูลต้นฉบับในรูปแบบสัญกรณ์ A1 เซลล์ปลายทางที่เป็นจุดมุมบนซ้ายของตารางพีวอต และชื่อตาราง มันจะวิเคราะห์ขอบเขตข้อมูล สแกนเพื่อตีความประเภทข้อมูลฟิลด์และสร้างแคช (โดยการนำแคชที่มีอยู่แล้วมาใช้งานใหม่หากมีตารางอื่นผูกเข้ากับขอบเขตข้อมูลเดียวกันอยู่แล้ว) และส่งคืนค่าอ็อบเจกต์ TXLSPivotTable ที่มีหนึ่งฟิลด์ต่อหนึ่งคอลัมน์ต้นฉบับ โดยในตอนเริ่มต้นฟิลด์ทุกตัวจะอยู่นอกแกนทั้งหมด หลังจากนั้นคุณสามารถสั่งกำหนดฟิลด์ลงในแต่ละแกนและเลือกรูปแบบการสรุปข้อมูล (aggregation) ประกาศฟังก์ชันมีรูปแบบดังนี้ และตัวแคช กระบวนการบีบอัด SXDBB และเรกคอร์ดมุมมองต่าง ๆ จะถูกสร้างขึ้นให้อย่างครบถ้วนในขั้นตอนการบันทึกไฟล์
uses
lxHandle, lxPivot;
var
Book : TXLSWorkbook;
Sheet: IXLSWorkSheet;
Pivot: TXLSPivotTable;
begin
Book := TXLSWorkbook.Create;
try
Book.Open('Sales.xls');
Sheet := Book.Sheets[1];
// Source A1:E500 on 'Data'; anchor the pivot at row 3, col 1.
Pivot := Sheet.AddPivotTable('Data!$A$1:$E$500', 3, 1, 'SalesByRegion');
if Pivot <> nil then
begin
Pivot.AddRowField('Region');
Pivot.AddColumnField('Quarter');
Pivot.AddDataFieldByName('Revenue', xlpaSum);
end;
Book.SaveAs('Sales-Pivot.xls');
finally
Book.Free;
end;
end;
แถวแรกของขอบเขตข้อมูลต้นฉบับจะถูกเปิดอ่านในฐานะส่วนหัวที่ระบุชื่อฟิลด์แคช ดังนั้นคำสั่ง AddRowField('Region') จะทำหน้าที่ค้นหาคอลัมน์ด้วยข้อความส่วนหัวแทนที่จะใช้ตำแหน่งพิกัด และเนื่องจากตารางพีวอตที่ได้รับคืนมาคือโมเดลอ็อบเจกต์ที่มีสิทธิ์ FromRawBlobs = False ตัวเขียนจะประมวลผลผ่านพาธการสร้างจากศูนย์: มันจะสร้างแคชพีวอตแยกอิสระในตัวเองโดยไม่ต้องพึ่งพาข้อมูลต้นฉบับเมื่อมีการสั่งรีเฟรชข้อมูลในภายหลัง ซึ่งเป็นคุณสมบัติที่คุณต้องการใช้เมื่อต้องส่งตารางพีวอตนี้ให้แก่ผู้รับปลายทางที่อาจจะเคลื่อนย้ายหรือลบข้อมูลต้นฉบับทิ้งไป
กระบวนการอ่านและปรับจูนเรกคอร์ดพีวอตและแคชของไฟล์ที่คุณไม่ได้เป็นคนผลิตขึ้นมาเอง รวมถึงพาธการเก็บรักษาบล็อกข้อมูลดิบ มีระบุใน คู่มือการตรวจสอบและการแปลงเวิร์กบุ๊ก และเมื่อข้อมูลต้นฉบับมีขนาดใหญ่ยาวหลายหมื่นแถวและสตรีม SXDBB ต้องเชื่อมเรกคอร์ดต่อเนื่องกันหลายรายการ เทคนิคใน บันทึกประสิทธิภาพการจัดการเวิร์กบุ๊กขนาดใหญ่ จะช่วยประหยัดเวลาไม่ให้ขั้นตอนสร้างแคชดึงทรัพยากรการประมวลผลไปทั้งหมด ทั้งคู่ทำงานประสานกับตัวเขียน PivotTable ที่มีมาพร้อมใช้งานใน HotXLS spreadsheet component สำหรับ Delphi และ C++Builder ร่วมกับ API จัดการเซลล์ สูตร แผนภูมิ และรูปแบบข้อมูลที่มีให้บริการในบล็อกนี้