COM6002 Big Data Management · Week 5
Data Visualization and Applications: Power BI (Practical)
COM6002 · Week 5 · Source: 5-Power BI.pptx (53 slides)
Contents · 12 sections
🎯 本講重點 (Learning outcomes)
- The background of Power BI:dashboard、BI、Excel vs Power BI
- The mechanisms of Power BI:Connect → Transform (Power Query / M) → Model → Calculate (DAX) → Visualize & Publish;VertiPaq engine
- OLTP vs OLAP;Dimensional model:Star schema vs Snowflake schema、Fact vs Dimension tables、Normalization
- OLAP actions:Roll-up、Drill-down、Drill-through、Slicing
- Data cube:假設、優點、限制;VertiPaq vs Data cube
- Use Power BI (practical):Get data、Power Query Editor、Merge Queries(join types)、Group by
⭐ 考試必溫 Top-5
- OLTP vs OLAP 比較表(concurrent users、read/write、ACID、response time、query complexity)
- Star vs Snowflake schema 比較(structure、joins、performance、disk space)+ Fact / Dimension table + Normalization 定義
- OLAP actions:roll-up / drill-down(concept hierarchy 或加減 dimension)、drill-through、slicing;drill-down vs slicing 的分別
- Data cube:assumptions、= GROUP BY query、advantage & limitations;VertiPaq vs Data cube 表
- Excel vs Power BI 異同(Power Query、VertiPaq、DAX)及 Power BI 五個步驟
1. Power BI 與 Business Intelligence
Dashboard:At-a-glance view of key performance indicators (KPIs)。
Power BI:Product of Microsoft;easy to build dashboard for BI;cloud-based service and offline version。Key features:Dashboard、Reporting、Online analytical processing (OLAP)。Other similar products:Tableau。
Business Intelligence (BI):Technology-driven process 去 analyse data 同 presenting actionable information(Moodle 有 interactive dashboard 例子)。
Slide 3、4、7 的 dashboard / Excel 截圖係圖片,文字擷取不到。
2. Excel vs Power BI
好多人覺得「Power BI is just an advanced Excel」。佢哋確實有好多共通點:
- Both are Microsoft products
- Both use the Power Query Editor for extracting, transforming, and loading (ETL) data
- Excel's Power Pivot 同 Power BI 的 core 用同一個 engine:VertiPaq — in-memory, column-based analytical engine
- Both use DAX (Data Analysis Expressions) for creating calculated columns and measures
- Both allow creating visualizations (charts, graphs, tables)
| Excel | Power BI | |
|---|---|---|
| Purpose | Spreadsheet and calculation | Business Intelligence — interactive reports, dashboards |
| Capacity | Limited(Excel file 有 1 million rows → performance degrades) | For Big Data |
| Data Model | Power Pivot (Optional) | Tables (and their relationships) (Mandatory) |
| Data Refresh | Manual | Automated by schedules |
| Sharing | File-based | Cloud-enabled |
3. Power BI tools:五個步驟
| Step | Component | Description |
|---|---|---|
| 1. Connect | Power Query | Accessing data from various sources (Databases, Files, Web APIs) |
| 2. Transform | Power Query Editor (M Language) | Cleaning, shaping, merging, and preparing data (ETL stage) |
| 3. Model | Data Model View | Defining relationships, setting data types, and creating hierarchies |
| 4. Calculate | DAX | Creating measures (KPIs) and calculated columns for analysis |
| 5. Visualize & Publish | Report View & Power BI Service | Creating interactive reports and sharing them with end-users |
Step 1–2 就係 Week 1 的 ETL / data pipeline(Ingestion + Processing);Step 1 的 Web APIs 就係 Week 2;Step 1 由 database 讀數就係 Week 4 slide 70 講的「SQL beyond coding」。
3.1 DAX:calculated column vs measure(概念)
Slides 只提到 DAX 用嚟整 measures (KPIs) 同 calculated columns,詳細語法列為 self-study(slide 53 附 Microsoft 的 DAX basics 教學)。以下係幫你理解概念的簡單例子(非 slide 內容,用課堂 Student / Module / Results 例子的欄位示意):
| Calculated column | Measure | |
|---|---|---|
| 計算時間 | Load / refresh data 時逐 row 計好,存喺 table | Query 時先計,按當時 filter context(例如 slicer 揀咗邊個 major)動態計 |
| 結果 | 每 row 一個值(新增一欄) | 一個 aggregate 值(KPI) |
| 類比 SQL | SELECT …, CASE WHEN … END AS Pass | SELECT COUNT(*) … GROUP BY …(group 由 visual 決定) |
-- Calculated column:每一行標記 pass / fail
Pass = IF(Results[Grade] = "F", "Fail", "Pass")
-- Measure:A grade 數目 / 比率(會跟住 slicer、drill-down 自動重算)
Num A = CALCULATE(COUNTROWS(Results), Results[Grade] = "A")
A Rate = DIVIDE([Num A], COUNTROWS(Results))
Measure 好似一條「未填 GROUP BY 的 SQL」:你喺 dashboard 擺一個 bar chart 按 Major 分,Power BI 就自動用 Major 做 group 去計 [A Rate];再加 Sex slicer,又會自動加 filter 重算。所以同一條 measure 可以用喺唔同 visual。
4. Data Model:OLTP vs OLAP
A robust data model is the foundation of performant BI。Transactional systems (OLTP) are optimized for data entry, not data analysis——佢哋有好多 tables 同 complex joins。Solution:A Dimensional Model simplifies the data structure for fast querying and easy summarization。
4.1 OLTP(Online Transactional Processing)
Function:to process (database) transactions and record them。Requirements:Online(real-time, extremely fast, low latency)、ACID compliance、High throughput(concurrently process 大量 transactions)。例子:Student enrollment system(HSU 幾千個學生同時揀科)、e-shop sales processing、bank transaction processing。
4.2 OLAP(Online Analytical Processing)
Perform interactive data analytics:explore and discover interesting findings from the data (statistics)。Online:user 可以做各種 actions 去睇唔同 statistics,response 要快;Data visualization is a key component。
例子(slides 12–13):一科的 basic statistics → Anything interesting? 睇 breakdown 搵 insights:例如 interaction — check the pass rate according to sex;其他可以 explore:Breakdown by age? Major? Year?
| OLTP | OLAP |
|---|---|
| Large number of concurrent users | Small number of concurrent users |
| Modify a small part (typically a few records) of the database | Usually read-only;aggregate queries to generate statistics |
| Strong consistency (ACID) is very important | Data from a data warehouse / lake;strong consistency (ACID) is not necessary |
| Response time must be very small(may handle a large number of transactions at the same time) | Response time (during exploration) longer than OLTP but still real-time level;don't mind a longer initial setup time |
| Simpler queries | More complex queries |
OLTP 需要的 ACID、concurrency control、recovery 就係 Week 3 的內容;OLAP 的 aggregate queries 就係 Week 4 的 GROUP BY。OLAP 數據來自 Week 1 的 data warehouse / lake。
5. Star Schema vs Snowflake Schema
Slide 14 的 star / snowflake 結構圖係圖片,文字擷取不到;slide 文字結論係 "We prefer star schema for OLAP"。
Star Schema:中央係 Fact table,周圍係 Dimension tables(provide additional context to the facts)。Design principles:
- Fact table — What happened? Example:Enrollment
- Dimension tables — Who, What, When, Where? Example:Student / Teacher / Course / Location information
5.1 Example(slides 16–17)
| Star Schema | Snowflake Schema |
|---|---|
| Enrollment (StudentID, Course, Year, Sem) — Fact table Student (StudentID, Major, Department, School) |
Enrollment (StudentID, Course, Year, Sem) Student (StudentID, Major) Programme (Major, Department) Unit (Department, School) |
Star 版本的 Student dimension:
| StudentID | Major | Department | School |
|---|---|---|---|
| 1 | CS | CS | DS |
| 2 | CS | CS | DS |
| 3 | DSAI | CS | DS |
| 4 | DSAI | CS | DS |
| 5 | Math | Math | DS |
Snowflake 版本拆成三個 tables:Student (1 CS, 2 CS, 3 DSAI, 4 DSAI, 5 Math);Programme (CS→CS, DSAI→CS, Math→Math);Unit (CS→DS, Math→DS)。
觀察:Star 版本 "CS, DS" 重複好多次(redundancy);Snowflake 每個事實只記一次,但要搵某學生的 School 要 join 三個 tables。
Normalization:The systematic process of organizing the columns and tables to (1) Minimize data redundancy;(2) Improve data integrity。
| Feature | Star Schema | Snowflake Schema |
|---|---|---|
| Structure | A central Fact Table surrounded by Dimension Tables | Dimension Tables are normalized (have child Dimension Tables) |
| Joins | Fewer joins required | More complex joins required |
| Performance | Faster query performance (fewer joins) | Slower query performance (more joins) |
| Disk Space | Uses more disk space (some redundancy in dimensions) | More space-efficient (less redundancy) |
We prefer star schema for OLAP——OLAP 主要係 read-only 分析,速度比慳位重要。
-- 「每個 School 有幾多 enrollment?」
-- Star:1 個 join
SELECT s.School, COUNT(*) FROM Enrollment e JOIN Student s ON e.StudentID = s.StudentID
GROUP BY s.School;
-- Snowflake:3 個 joins
SELECT u.School, COUNT(*) FROM Enrollment e
JOIN Student s ON e.StudentID = s.StudentID
JOIN Programme p ON s.Major = p.Major
JOIN Unit u ON p.Department = u.Department
GROUP BY u.School;
6. OLAP Actions (exploration)
| Action | Definition |
|---|---|
| Roll-up (drill-up) | Aggregating data |
| Drill-down (roll-down) | Breaking data into more details;roll-up is the reverse of drill-down |
| Drill-through | Navigate from a summary view to a detailed report page filtered to a specific context |
| Slicing | Add filters to focus on particular value(s) for some attribute(s) |
Drill-down vs slicing:Drill-down — the data source is the same(只係睇得更細);Slicing — part of the data is filtered(有啲資料唔再睇)。
6.1 Roll-up / drill-down example 1:Moving up/down in a concept structure
Grades of A and B are "pass":
| Detailed (drill-down) | Summarised (roll-up) | |||||
|---|---|---|---|---|---|---|
| Major | Grade | Count | Major | Grade | Count | |
| DSAI | A | 10 | DSAI | Pass | 25 | |
| DSAI | B | 15 | DSAI | F | 3 | |
| DSAI | F | 3 | CS | Pass | 28 | |
| CS | A | 7 | CS | F | 6 | |
| CS | B | 21 | ||||
| CS | F | 6 | ||||
Roll-up:DSAI Pass = 10 + 15 = 25;CS Pass = 7 + 21 = 28。由此可計 pass rate:DSAI 25/28 ≈ 89%,CS 28/34 ≈ 82%。
6.2 Roll-up / drill-down example 2:Adding / removing a dimension
加入 dimension "sex" = drill-down;拎走 = roll-up:
| Major | Grade | Sex | Count |
|---|---|---|---|
| DSAI | A | M | 2 |
| DSAI | A | F | 8 |
| DSAI | B | M | 8 |
| DSAI | B | F | 7 |
| DSAI | F | M | 2 |
| DSAI | F | F | 1 |
| … | … | … | … |
檢查:DSAI A = 2 + 8 = 10 ✓;DSAI B = 8 + 7 = 15 ✓。
6.3 Drill-through example
由 summary(DSAI, A, 10)open another page,列出該 context 的詳細記錄:StudentID / Name / Major / Grade(1 Alice DSAI A;5 Amy DSAI A;11 Bob DSAI A;…)。The other page may use a different set of attributes / metrics(例如 Name 喺 summary 頁冇出現)。
6.4 Slicing example
Select only records of grade A → 剩 (DSAI, A, 10)、(CS, A, 7)。
-- OLAP actions 用 SQL 理解(Enrol(Major, Grade, Sex, StudentID, Name))
-- Drill-down(加 Sex dimension)
SELECT Major, Grade, Sex, COUNT(*) FROM Enrol GROUP BY Major, Grade, Sex;
-- Roll-up(concept hierarchy:A/B → Pass)
SELECT Major, CASE WHEN Grade IN ('A','B') THEN 'Pass' ELSE 'F' END AS G, COUNT(*)
FROM Enrol GROUP BY Major, G;
-- Slicing(filter)
SELECT Major, Grade, COUNT(*) FROM Enrol WHERE Grade = 'A' GROUP BY Major, Grade;
-- Drill-through(去明細頁)
SELECT StudentID, Name, Major, Grade FROM Enrol WHERE Major = 'DSAI' AND Grade = 'A';
7. VertiPaq:Power BI's core engine
- In-memory
- Columnar database(NoSQL chapter 會再講)
- With compression technique
- Multi-threading
- Caching
High computational speed for usual workload on modern hardware(although the computation complexity is still )。
OLAP query 例如「計 Grade = A 的數目」只需要 Grade 一欄。Row-based 儲存要讀晒每行所有欄;columnar 只讀 Grade 欄,而一欄入面重複值多(A、B、F…)好易壓縮。但始終要掃晒 n 個值,所以仍然係 ——只係常數細好多。
8. Data cube in OLAP
Efficiency challenge:如果有 billions of records,一個 query 可能要幾分鐘 / 幾粒鐘;user 每次有 follow-up query 都要等。Idea:Pre-compute the common intermediate components for answering all potential queries the user may ask。
Assumptions:
- We know the set of features F that the user may explore
- F is small enough
- The number of combinations of the values in F is significantly smaller than the size of the database
Idea:Pre-build data cube(s) from the database based on F;all OLAP actions are calculated based on the data cube(s)(Database → Data cube(s) → Application)。
8.1 Example data cube(Features: Grade, Major, Sex)
3 個 features,每個 2 個值 → 2 × 2 × 2 = 8 cells。Slide 28 的大數據版本(按每面加總核對過的排列):
| Sex | Grade: A | Grade: F | ||
|---|---|---|---|---|
| DSAI | CS | DSAI | CS | |
| M | 2355 | 711 | 211 | 595 |
| F | 8712 | 15 | 103 | 16 |
Slide 28、30–32 的 cube 係立體圖形,文字擷取出來的數字次序已打亂;上表及下表的 cell 位置係按 slide 30–31 drill-down 結果(A-DSAI 10、A-CS 7、F-DSAI 3、F-CS 6)及 slide 22 的數字反推,請對照原 slide 確認。
8.2 Analysis of data cubes
- Size of data cube is much smaller than the database:例子中 cube 只有 8 cells,但 database 可以有 10,000+ records(上表 8 個數加埋 = 12,718)
- Advantage:The system can react to OLAP actions much faster
- Limitations:(1) 分析涉及 new feature → 要 recalculate a new data cube;(2) New data added → 要 maintenance 去 update cube,否則分析唔包括新資料
8.3 用 cube 做 drill-down / roll-up(slides 30–31)
細數據版本 cube(Grade × Major × Sex):
| Sex | Grade: A | Grade: F | ||
|---|---|---|---|---|
| DSAI | CS | DSAI | CS | |
| M | 2 | 7 | 2 | 5 |
| F | 8 | 0 | 1 | 1 |
Summarizing the data along some dimension(s)(加總 Sex)→ (A, DSAI, 10)、(A, CS, 7)、(F, DSAI, 3)、(F, CS, 6);再加總 Major → (A, 17)、(F, 9)。反方向 break down the cube 就係 drill-down:Grade → Grade × Major。全部只需要加 8 個 cells,完全唔使掂原始 database。
8.4 Generating the data cube:It is just a GROUP BY query
SELECT Grade, Major, Sex, COUNT(*) AS Count
FROM Enrol
GROUP BY Grade, Major, Sex;
-- (A, DSAI, M, 2), (A, DSAI, F, 8), (F, DSAI, M, 2), (F, DSAI, F, 1), …
-- 之後所有 OLAP action 都喺 cube 上做,例如 roll-up 到 Grade:
SELECT Grade, SUM(Count) FROM Cube GROUP BY Grade; -- A 17, F 9
喺 cube 上 roll-up 要用 SUM(Count),唔係 COUNT(*)——cube 每行已經係一個計數,COUNT(*) 只會數到有幾多個 cells。
8.5 VertiPaq vs Data cube
| VertiPaq | Data cube | |
|---|---|---|
| Support in Power BI | Native engine | Need external data cubes |
| Query speed | Good for general workload | Near-instant for anticipated queries |
| Storage | No additional storage | Require additional storage; small |
| Flexibility | Handle any query | Only for anticipated queries |
| Preparation time | No preparation is required | The query time to build the cube; slow when the database is very large |
Simple Integration:Load the data cube cell data instead of raw data in Power BI → Power BI 要管理的 records 少好多 → much faster!
9. Power BI practical walkthrough
Slides 35–50 主要係 Power BI 介面截圖(新 file 介面、Get data 選單、Power Query Editor、Merge Queries 對話框、Group by 對話框、結果、visuals 面板),圖片內容擷取不到;以下根據 slide 文字整理步驟,操作細節請對照原 slide。
- Getting data:Home > Get data。Data sources:Databases(Microsoft SQL (MSSQL)、other databases)、Files(CSV、Excel)
- In-class example:Moodle 上 3 個 CSV files(exam results database):Student、Module、Results
- Import Module.csv:Check the data values. Are they what we want? Remember data quality is very important! 問題:The column headers are not recognized! → 用 Power Query interface 轉換
- Power Query Editor:Make the first row as column name(Use First Row as Headers)。Self-study:explore 其他 Power Query operations
- Exercise:Home > New Source,加埋另外兩個 CSV
- Joining the tables:Home > Combine > Merge Queries。Options:select the table to join、select the columns to join、select the join type
- Exercise:用 Merge Queries 將 Student 同 Module 合併入 Results table
- Preparing the column for aggregation(for preparing the underlying data cube):Home > Group by——count the number of records; group by student, module and grade
- Result:Every record has a count of 1。Don't worry:之後可以做更高層次 grouping;呢個 data cube 係用嚟 support further aggregation
- Close Power Query Editor → add visual components [self-study] → Done!
每個學生每科只有一個成績,所以 (student, module, grade) 組合本身就係 unique,group 完每組只有 1 行。呢個 "cube" 冇壓縮到資料量,但佢提供咗一個 Count 欄,之後 visual 可以用 SUM(Count) 按 module、grade 等任意 roll-up。
9.1 Merge Queries 的 join types
A = Module (COM6001 Computing, COM6002 Database);B = Result (123456 COM6001, 234567 COM6003)。
| Join type | 結果 |
|---|---|
| A INNER JOIN B | (COM6001, Computing, 123456, COM6001) |
| A Left Outer Join B | (COM6001, Computing, 123456, COM6001);(COM6002, Database, Null, Null) |
| A Full Outer Join B | 上面兩行 + (Null, Null, 234567, COM6003) |
| A Left Anti Join B | (COM6002, Database, Null, Null) — 只要 records in A but not B |
-- Left Anti Join 用 SQL 表達:
SELECT m.* FROM Module m LEFT JOIN Result r ON m.ModuleCode = r.Module
WHERE r.Module IS NULL; -- COM6002(冇人修)
Merge Queries = Week 4 的 JOIN = pandas merge(how="inner"/"left"/"outer");Power Query 的 Group by = SQL GROUP BY = pandas groupby().size()。Left anti join 喺 pandas 可以用 merge(..., how="left", indicator=True) 再揀 _merge == "left_only"。
10. Exercises & self-study
Exercise(Moodle 上的 Power BI demo):
- Who received the most A grades? → 101101 Amy(lecturer notes)
- Which module(s) is/are easier to get A? → COM6002 and COM6003
- Which module(s) is/are not easy to get a pass? → COM6102
- What else interesting can you find from the dashboard?
In-class participation:download Microsoft 官方 Power BI financial sample(或 Moodle 的 xlsx),design a dashboard(hint:研究 columns,例如 COGS = Cost of goods sold),提交 Power BI file(2 marks)。
Self-study area:DAX (Data Analysis Expressions)、Publishing reports and dashboards、Scheduling Data Refresh for datasets。
自我測驗 Self-test
Q1. 列出 Excel 同 Power BI 的三個共通點同三個分別。
共通:都係 Microsoft 產品;都用 Power Query Editor 做 ETL;Power Pivot / Power BI 都用 VertiPaq engine;都用 DAX 做 calculated columns 同 measures;都可做 visualization。分別:Purpose(spreadsheet vs BI dashboard)、Capacity(~1M rows 變慢 vs big data)、Data model(optional vs mandatory)、Refresh(manual vs scheduled)、Sharing(file vs cloud)。
Q2. 大學選科系統同 BI dashboard 分別屬於 OLTP 定 OLAP?各自的要求係乜?
選科系統 = OLTP:大量 concurrent users、每次改少量 records、ACID 非常重要、response time 要極短、query 簡單。Dashboard = OLAP:少量 users、read-only aggregate queries、數據來自 warehouse/lake、唔需要 strong consistency、response 可以稍長但仍 real-time、query 複雜、可接受較長 initial setup。
Q3. 比較 star schema 同 snowflake schema,並解釋點解 OLAP 偏好 star schema。
Star:central fact table + 非 normalized 的 dimension tables;joins 少、query 快、用多啲 disk(redundancy)。Snowflake:dimension tables normalized(有 child dimension tables);joins 多而複雜、query 慢、慳空間。OLAP 主要讀取分析,速度重要過空間,所以偏好 star。
Q4. Normalization 的兩個目的係乜?
(1) Minimize data redundancy;(2) Improve data integrity。
Q5. 由 (Major, Grade, Count) 表:DSAI A 10、B 15、F 3;CS A 7、B 21、F 6。將 A/B roll-up 成 Pass,並計各 major 的 pass rate。
DSAI Pass = 25、F = 3 → 25/28 ≈ 89.3%。CS Pass = 28、F = 6 → 28/34 ≈ 82.4%。
Q6. 以下屬於邊種 OLAP action?(a) 加入 Year dimension 睇每年分佈 (b) 只睇 2025 年數據 (c) 由 "CS, F, 6" 跳去另一頁列出 6 個學生名 (d) 將 Major 合併成 School 層次
(a) Drill-down(加 dimension);(b) Slicing(filter);(c) Drill-through;(d) Roll-up(concept hierarchy 向上)。
Q7. Data cube 的三個 assumptions 同兩個 limitations 係乜?Features Grade (A, B, F)、Major (DSAI, CS, Math)、Sex (M, F) 的 cube 最多有幾多 cells?
Assumptions:知道 user 會 explore 的 features F;F 夠細;F 值組合數遠少於 database size。Limitations:新 feature 要重新建 cube;新數據要 maintenance 更新 cube,否則分析唔包括新數據。Cells = 3 × 3 × 2 = 18。
Q8. 寫 SQL 由 Enrol(StudentID, Grade, Major, Sex) 生成 data cube,再由 cube roll-up 到每個 Major 的總人數。
CREATE TABLE Cube AS SELECT Grade, Major, Sex, COUNT(*) AS Count FROM Enrol GROUP BY Grade, Major, Sex; 然後 SELECT Major, SUM(Count) FROM Cube GROUP BY Major;(要用 SUM(Count) 唔係 COUNT(*)。)
Q9. VertiPaq 有咩特點?佢同 data cube 比較有咩取捨?
VertiPaq:in-memory、columnar、compression、multi-threading、caching;快但 complexity 仍 。對比 data cube:VertiPaq 係 native、可處理任何 query、唔使額外 storage 或準備時間,適合 general workload;data cube 對 anticipated queries 近乎即時,但要額外(少量)storage、只支援預計的 queries、建 cube 喺大 database 好慢、而且 Power BI 要外部 cube。
Q10. Power Query Merge Queries 中,A Left Anti Join B 會回傳乜?用 slide 例子答。
只回傳喺 A 但唔喺 B 的 records:A = Module、B = Result,結果係 (COM6002, Database)——冇學生修的 module。
一頁總結 Cheat sheet
- Dashboard = at-a-glance KPIs;BI = analyse data → actionable information;Power BI vs Tableau
- Excel & Power BI 共用:Power Query (ETL)、VertiPaq、DAX、visualizations;Power BI:big data、data model mandatory、scheduled refresh、cloud sharing
- Workflow:Connect (Power Query) → Transform (Power Query Editor, M) → Model (relationships, types, hierarchies) → Calculate (DAX measures & calculated columns) → Visualize & Publish
- OLTP:many users、few-record updates、ACID、tiny latency、simple queries
- OLAP:few users、read-only aggregates、warehouse/lake、no strict ACID、complex queries、setup time OK
- Fact table = what happened;Dimension = who / what / when / where
- Star:fewer joins、faster、more space;Snowflake:normalized dimensions、more joins、slower、less space;OLAP prefers star
- Normalization:minimize redundancy + improve integrity
- Roll-up(aggregate / 上 concept hierarchy / 減 dimension)↔ Drill-down;Drill-through(去明細頁);Slicing(filter);drill-down 同一 data,slicing 過濾 data
- VertiPaq:in-memory、columnar、compression、multi-threading、caching、仍
- Data cube:已知細 feature set F → 預先 GROUP BY;快;新 feature / 新 data 要重建;roll-up 用 SUM(Count)
- VertiPaq vs cube:native / any query / no prep vs external / anticipated only / extra small storage / build time
- Practical:Get data → Use first row as headers → New Source → Merge Queries(inner / left outer / full outer / left anti)→ Group by → visuals