CUBESET ส่งชุด MDX expression ไปยังเซิร์ฟเวอร์คิูบ แล้วส่งชุดข้อมูลกลับมาใช้กับฟังก์ชัน CUBE อื่นๆ เหมาะสำหรับงานวิเคราะห์ข้อมูล OLAP
=CUBESET(connection, set_expression, [caption], [sort_order], [sort_by])
=CUBESET(connection, set_expression, [caption], [sort_order], [sort_by])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| connection | text | Yes | ข้อความที่ระบุชื่อของการเชื่อมต่อกับคิูบ ต้องตรงกับชื่อการเชื่อมต่อที่ตั้งไว้ใน Excel | |
| set_expression | text | Yes | ข้อความ MDX set expression หรืออ้างอิงเซลล์ที่มีสมาชิก tuples หรือชุด เช่น ‘[Product].[Product].Children’ หรือ Order([Time].[Month].Members, [Measures].[Amount], DESC) | |
| caption | text | Optional | ข้อความที่จะแสดงในเซลล์แทนชื่อชุด ถ้าไม่ระบุจะแสดงค่าโดยปริยาย | |
| sort_order | number | Optional | 0 | ตัวเลข 0-6 ที่ระบุการเรียงลำดับ: 0=SortNone (ค่าปริยาย) 1=SortAscending 2=SortDescending 3=SortAlphaAscending 4=SortAlphaDescending 5=SortNaturalAscending 6=SortNaturalDescending |
| sort_by | text | Optional | ข้อความที่ระบุค่าที่ใช้สำหรับการเรียงลำดับ จำเป็นต้องใช้เมื่อ sort_order เป็น 1 หรือ 2 เช่น ‘[Measures].[Sales Amount]’ หรือ ‘[Measures].[Quantity]’ |
ใช้ CUBESET เพื่อสร้างชุดของประเภทสินค้าทั้งหมดจากคิูบ
ใช้ CUBESET กับ sort_order=1 และ sort_by='[Measures].[Sales Amount]' เพื่อสร้างชุดสินค้าเรียงลำดับจากยอดขายมากไปน้อย
CUBESET("Finance", "[Product].[Product].[All].Children", "Products")=CUBESET("Finance", "[Product].[Product].[All].Children", "Products")
ชุดของประเภทสินค้าทั้งหมดจากมิติ Product
CUBESET("Sales", "[Product].[All Products].Children", "Products by Sales", 1, "[Measures].[Sales Amount]")=CUBESET("Sales", "[Product].[All Products].Children", "Products by Sales", 1, "[Measures].[Sales Amount]")
ชุดของสินค้าเรียงลำดับจากน้อยไปมาก (Ascending) ตามยอดขาย
CUBESET("Finance", "Order([Time].[Month].Members, [Measures].[Amount], DESC)", "Months Sorted")=CUBESET("Finance", "Order([Time].[Month].Members, [Measures].[Amount], DESC)", "Months Sorted")
ชุดของเดือนเรียงลำดับตามจำนวนจากมากไปน้อย
CUBESETCOUNT(CUBESET("Sales", "[Customer].[Customer Country].Members"))=CUBESETCOUNT(CUBESET("Sales", "[Customer].[Customer Country].Members"))
ตัวเลขจำนวนประเทศทั้งหมดในข้อมูลลูกค้า
sort_order ระบุ ‘วิธีการ’ เรียงลำดับ เช่น Ascending หรือ Descending ส่วน sort_by ระบุ ‘ค่าไหน’ ที่ใช้สำหรับเรียง เช่น [Measures].[Sales Amount] ซึ่ง sort_by จำเป็นต้องใช้เมื่อ sort_order เป็น 1 (Ascending) หรือ 2 (Descending) เท่านั้น ถ้า sort_order=0 ไม่ต้องใส่ sort_by
Set_expression ต้องเป็นนิพจน์ MDX (Multidimensional Expression) ที่ส่งกลับชุด เช่น [Product].Children (สมาชิกลูก) [Product].Members (สมาชิกทั้งหมด) หรือใช้ function เช่น Order() CrossJoin() Filter() ฯลฯ หรือคุณอ้างอิงเซลล์ที่มีตัวแปรชุด MDX ถ้า expression ยาวกว่า 255 ตัวอักษร ต้องเก็บไว้ในเซลล์แล้วอ้างอิงแทน
CUBEMEMBER ส่งกลับ ‘สมาชิกตัวเดียว’ (single member) จากคิูบ ส่วน CUBESET ส่งกลับ ‘ชุดของสมาชิก’ (set of multiple members) ที่สามารถใช้เป็น input ให้กับฟังก์ชัน CUBE อื่นๆ เช่น CUBESETCOUNT CUBERANKEDMEMBER ได้ ถ้าต้องการค่าตัวเดียว ใช้ CUBEMEMBER แต่ถ้าต้องการหลายค่า ใช้ CUBESET
ข้อความ ‘#GETTING_DATA…’ บอกว่า Excel กำลังรออยู่ว่าเซิร์ฟเวอร์คิูบจะประมวลผลและส่งข้อมูลกลับมา นี่เป็นสิ่งปกติครับ โดยเฉพาะเมื่อ set_expression มีความซับซ้อน หรือปริมาณข้อมูลเยอะ บางครั้งต้องรอไป 30 วินาที ถ้ารออีก ลองเช็คการเชื่อมต่อกับเซิร์ฟเวอร์
CUBESET สร้างชุด (set) ของสมาชิกจากคิูบโดยส่งนิพจน์ MDX (Multidimensional Expression) ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะประมวลผลแล้วส่งชุดข้อมูลกลับ Excel เพื่อให้คุณใช้งานต่อไป ฟังก์ชันนี้รองรับการเรียงลำดับแบบต่างๆ เช่น Ascending, Descending, Alphabetic และสามารถใช้เป็น input ให้กับฟังก์ชัน CUBE ตัวอื่นๆ เช่น CUBERANKEDMEMBER หรือ CUBESETCOUNT
ที่เจ๋งคือ CUBESET ทำให้คุณสามารถสร้างชุดข้อมูลที่ซับซ้อนจาก OLAP Cube ได้อย่างอิสระ โดยไม่ต้องตกติดเฉพาะที่ข้อมูลเท่านั้น คุณสามารถจัดเรียง ฟิลเตอร์ หรือสร้างชุดแบบไดนามิก ได้ตามต้องการ เฉพาะที่เซิร์ฟเวอร์ OLAP ของคุณรองรับ MDX
ส่วนตัวผม พบว่า CUBESET มีประโยชน์มากเวลาทำงาน Data Analysis กับ SQL Server Analysis Services หรือ Azure Analysis Services แต่ต้องเข้าใจ MDX Expression ก่อนถึงจะใช้ได้คล่อง ซึ่งบางครั้งค่อนข้างถึกหน่อยครับ 😅