1
ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC KINH TẾ - LUẬT
KHOA TIN HỌC QUẢN LÝ
CHUYÊN ĐỀ PHÂN TÍCH SỐ LIỆU.
Giáo viên hướng dẫn: Ths. Hồ Trung Thành.
Thành viên nhóm :
Cao Thiện Hảo K08406105x
Nguyễn Quang Hiển K084061056
Vũ Văn Thành K084061110
Châu Thanh Tùng K08406xxxx
2
MỞ ĐẦU
Microsoft SQL Server OLAP Services là một dịch vụ cung cấp cho người dùng kiến
trúc phục vụ cho việc lưu trữ và truy cập dữ liệu dưới hình thức đa chiều.Những dữ
liệu được lưu dưới dạng đa chiều này có thể được tổng hợp, tổ chức và lưu trữ nhằm
nhanh chóng đáp ứng được những yêu cầu truy vấn của người sử dụng.Và để thực
hiện những truy vấn cho hình thức dữ liệu này, Microsoft đã cung cấp cho chúng ta
ngôn ngữ truy vấn MultiDimensional eXpressions (MDX).
MDX chính là ngôn ngữ đầy đủ có thể hỗ trợ người sử dụng thực hiện việc truy vấn
trên các dữ liệu khối, và khả năng truy vấn của ngôn ngữ này cũng chính là trọng tâm
mà tiểu luận này quan tâm đến. Để có thể minh họa đầy đủ và thuyết phục các khả
năng đó, nhóm sẽ sử dụng CSDL Northwind mẫu của Microsoft và khối dữ liệu
NorthwindDW do nhóm 15 lớp K07406 trường Đại học Kinh tế - Luật đã xây dựng
trước đây.
3
1. Giới thiệu.
1.1. Giới thiệu ngôn ngữ MDX.
Ngôn ngữ MDX (MultiDemensional eXpression) là ngôn ngữ truy vấn cho cơ
sở dữ liệu đa chiều, nó tương tự ngôn ngữ SQL cho cơ sở dữ liệu quan hệ, tuy
nhiên đây là ngôn ngữ tính toán vì thế nó tương tự có cú pháp giống công thức
của bảng tính. MDX do Microsoft giới thiệu vào năm 1997 cùng với SQL
Server 7.0 nhanh chóng được các nhà phát triển chấp nhận đã trở thành chuẩn
cho hệ thống OLAP. Từ năm 2001 khi XMLA ra đời MDX được mở rộng và
hỗ trợ truy vấn với MDX (MDXML).
Ngôn ngữ MDX hỗ trợ mạnh cho tính toán trên khối dữ liệu đa chiều, nó hỗ
trợ việc truy cập dữ liệu một cách trực quan và dễ dàng. Người dùng có thể
trích xuất dữ liệu từ cube với số chiều bất kỳ. MDX có thể trả lời được các câu
hỏi phức tạp trong kinh doanh ở thế giới thực như: “trong các khu vực bán
được nhiều sản phẩm nhất đâu là dòng sản phẩm bán chạy nhất ?” .
MDX được xây dựng cho các hệ thống phân tích dữ liệu chính vì thế nó có thể
xử lý được những truy vấn một cách dễ dàng. MDX có thể xử lý dữ liệu một
cách mềm dẻo, kết quả trả về của MDX cũng rất linh hoạt. Các phép truy vấn
phức tạp trong SQL như pivot được sử dụng một cách dễ dàng trong MDX.
MDX không hỗ trợ các ngôn ngữ định nghĩa dữ liệu (DDL) tuy nhiên ngôn
ngữ thao tác dữ liệu (DML) của MDX có hỗ trợ thực thi một số thao tác định
nghĩa dữ liệu.
Cấu trúc của MDX giống như SQL nhưng mở rộng hơn để thao tác với cơ sở
dữ liệu đa chiều. Câu truy vấn MDX có cấu trúc như sau :
4
Trong đó:
Mệnh đề SELECT dùng để xác định các chiều của tập hợp kết quả.
Mệnh đề này còn hỗ trợ các cú pháp tuỳ chọn khác, như là từ khóa
WITH và việc sử dụng các hàm MDX để xây dựng các thành viên
bằng việc tính toán để thêm vào 1 trục hoặc 1 chiều cắt.
Mệnh đề FROM xác định nguồn dữ liệu (cube) dùng để lấy dữ liệu.
Mệnh đề WHERE dùng để xác định chiều cắt dữ liệu , nhằm lọc dữ
liệu đầu ra.
Trong cấu trúc của MDX và cú pháp truy vấn SQL ta nhận thấy một số điểm
tương đồng như đều có các mệnh đề SELECT, FROM, WHERE, vẫn có thể
chứa các subquery, tuy nhiên chúng có một số khác biệt như sau :
Cú pháp MDX phân biệt các tập hợp bằng việc dùng dấu ngoặc nhọn
{ } bao quanh các bộ hay thành viên.
Câu truy vấn MDX có thể chứa tới 128 chiều, nhưng chỉ có 5 chiều
đầu tiên là có aliase (tên phụ). Một trục có thể được tham chiếu bởi
thứ tự của nó trong câu MDX hay bởi tên phụ của nó nếu có.
Trong câu truy vấn SQL, mệnh đề FROM có thể chỉ đến nhiều bảng
dữ liệu. Tuy nhiên, mệnh đề FROM trong câu truy vấn MDX bị giới
hạn ở 1 khối duy nhất. Thông tin từ các khối khác có thể được tham
khảo theo từng giá trị bằng cách dùng hàm LookupCube.
Mệnh đề WHERE được dùng để mô tả chiều cắt dữ liệu. Nếu 1
chiều không được đề cập trong mệnh đề WHERE, SQL Analysis
Services vẫn xem nó là 1 chiều cắt, nhưng được lọc theo số thành viên
SELECT [mô tả về chiều thứ nhất] ,
[mô tả về chiều thứ hai]…
FROM [mô tả về khối dữ liệu]
WHERE [điều kiện cắt lớp]
5
mặc định của nó. Mệnh đề WHERE có thể thay đổi tiến trình lọc cho
một chiều nào đó, giúp tinh chỉnh dữ liệu kết quả.
1.2. Soạn thảo MDX với SQL Server .
Đăng nhập vào SQL Server với Server type là Analysis Services.
Click chọn vào icon MDX để tạo ra một file soạn thảo câu lệnh MDX. File này là
file text và có phần mở rộng là *.mdx
6
Màn hình Connect to Analysis Services hiện lên, ta chọn Server name và click
connect để tiếp tục.
7
Giao diện làm việc với MDX. Trong đó:
Vùng 1: là vùng Metadata.
Vùng 2: là vùng soạn thảo MDX.
Vùng 3: là vùng hiển thị kết quả từ câu truy vấn MDX.
2. Sơ lượt về CSDL và Nhà kho dữ liệu mẫu dùng để thực hiện các ví dụ.
Trong quá trình nghiên cứu về MDX, nhóm sử dụng cơ sở dữ liệu Northwind cùng
với kho dữ liệu NorthwindDW do nhóm 15 lớp K07406 xây dựng để làm kho dữ
liệu mẫu và thực hiện truy vấn bằng MDX trên kho dữ liệu này. Do đó trong phần
này, nhóm xin mô tả lại kho dữ liệu này.
Hình. Lượt đồ bông tuyết của kho NorthwindDW.
8
Kho dữ liệu sẽ chứa thông tin tổng hợp về những giao dịch mua hàng của khách
hàng, bao gồm thông tin khách hàng, nhân viên, sản phẩm, nhà cung cấp, công ty
vận chuyển.
Dữ liệu bán hàng được lưu trữ theo thời gian, phục vụ các yêu cầu về phân tích,
thống kê liên quan đến vấn đề bán hàng của những nhà quản lý để có thể đưa ra
những quyết định trong kinh doanh.
2.1. Các bảng chiều.
Primary dimensions:
DimTime (DateKey, Date, Month, Quarter, Year)
DimCustomer (CustomerID, CompanyName, ContactName, Phone,
Address, City, Region, Country)
DimShipper (ShipperID, CompanyName, Phone)
DimEmployee (EmployeeID, FullName, Title, BirthYear, HireYear,
Phone, Address, City, Region, Country)
DimProduct (ProductID, ProductName, Category, SupplierID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder)
-Secondary dimension:
DimSupplier (SupplierID, CompanyName, Phone, Address, City,
Region, Country)
2.2. Bảng sự kiện.
FactOrder (OrderID, ProductID, CustomerID, EmployeeID, ShipperID,
OrderDate, RequiredDate, ShippedDate, UnitPrice, Quantity,
Discount, Total).
3. Một số hàm thông dụng trong MDX.
3.1. Hàm CrossJoin() .
Tích các thành viên hay các bộ trong hai tập hợp khác nhau.
Ví dụ: cho biết số lượng sản phẩm của từng nhân viên bán được theo năm.
9
Kết quả:
3.2. Hàm Filter().
Thu gọn một tập hợp bằng cách chỉ lấy những phần tử thỏa mãn các tiêu chí
nào đó.
Cú pháp : Filter (Set_Expression, Logical_Expression)
Ví dụ: Cho biết tên các sản phẩm có tổng số lượng lớn hơn 500 và nhỏ hơn
1000.
Kết quả:
SELECT crossjoin([Dim Employee].[Full Name].members,
[Dim Product].[Product Name]) on Columns,
[Dim Time].[Year].members on Rows
FROM [Cube_NorthwindDW]
WHERE [Measures].[Quantity]
SELECT FILTER([Dim Product].[Product Name].MEMBERS,
[Measures].[Quantity] >500 AND
[Measures].[Quantity] <1000) ON COLUMNS,
[Dim Time].[Year].MEMBERS ON ROWS
FROM [Cube_NorthwindDW]
WHERE [Measures].[Quantity]
10
3.3. Hàm Order().
Sắp xếp giá trị của một tập hợp theo các điều kiện.
Cú pháp :
Numeric expression
Order(Set_Expression, Numeric_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
String expression
Order(Set_Expression, String_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
Input :
Một tập hợp, một biểu thức luận lý
Một biểu thức trả về giá trị số/ chuỗi
Output : một tập hợp đươc sắp sếp theo một tiêu chỉ định trước.
ASC : sắp xếp theo thứ tự tăng dần
DESC : sắp xếp theo thứ tự giảm dần
Ví dụ: Hãy sắp xếp tổng số lượng sản phẩm của các năm theo thứ tự giảm dần.
Kết quả:
Select [Measures].[Quantity] on Columns,
Order([Dim Time].[Year].members,
[Measures].[Quantity],Desc) on Rows
From [Cube_NorthwindDW]
11
3.4. Hàm TopCount()
Sắp xếp một tập hợp thứ tự giảm dần và trả về số quy định của các yếu tố có
giá trị cao nhất.
Cú pháp :
TopCount (Set_Expression, Count, Numeric_Expression])
Input:
Một tập hợp, một biểu thức luận lý
Một con số để xác định số lượng các giá trị trả về
Một biểu thức trả về giá trị số để sắp xếp giá trị trả về
Output :
Một tập hợp các yếu tố có giá trị cao nhất theo quy định.
Ví dụ: Hãy cho biết top 5 doanh thu theo tháng.
Kết quả:
Select [Measures].[Total] on Columns,
TopCount([Dim Time].[Month].members,
5,[Measures].[Total]) on rows
From [Cube_NorthwindDW]
12
3.5. Hàm ParallelPeriod()
Trả về một giá trị từ một khoảng thời gian trước trong cùng một vị trí tương
đối theo một giá trị quy định cho trước .
Cú pháp :
ParallelPeriod( [ Level_Expression [ ,Index [ , Member_Expression ] ] ] )
Input :
Một tập hợp, một biểu thức luận luận lý
Một giá trị xác định thời gian song song so sánh
Một biểu thức trả về một đơn vị(một thành viên)
Output :
Trả về giá trị của thời gian song song theo quy định
Quy ước:
Giá trị mặc định Index = 1
3.6. Hàm StrToMember().
Chuyển một chuổi được nhập vào từ tham số sang Member.
Trả về các giá trị theo quy định của một biểu thức đa chiều (MDX), định dạng
chuỗi.
Cú pháp :
StrToMember(Member_Name [,CONSTRAINED])
Input : Một biểu thức chuỗi giá trị quy định cụ thể, trực tiếp hoặc gián tiếp,
một thành viên.
Ouput : member.
Nếu không có cờ CONSTRAINED, tham số Member_Name có thể chứa một
vài mệnh đề MDX, ngược lại thì chỉ duy nhất một member name được sử
dụng. Constrained này được tạo ra nhằm tránh cho server không bị tấn công
theo dạng injection.
13
Ví dụ:
Kết quả:
3.7. Hàm IIf().
Trả về một trong hai giá trị được xác định bởi một phép thử logic .
Cú pháp:
IIf(Logical_Expression, Expression1, Expression2)
Input :
Một biểu thức logic
Hai giá trị (biểu thức đa chiều) trả về
Output : Một trong hai giá trị trả về ở input
Ví dụ: Viết câu MDX ghi ra nhận xét rằng: nếu tổng doanh thu trong một năm
lớn hơn hoặc bằng 1,000,000 thì hiển thị “>=1,000,000”. Ngược lại hiển thị “<
1,000,000”
Select {strToMember('[Dim Employee].[Full Name].[Janet
Leverling]')} on Columns,
[Measures].[Total] on rows
From [Cube_NorthwindDW]
With Member NhanXet As
IIF([Measures].[Total]>=1000000,
">=1,000,000","<1,000,000")
Select {[Measures].[Total],NhanXet}on Columns,
[Dim Time].[Year].members on Rows
From [Cube_NorthwindDW]
14
Kết quả.
3.8. Hàm Lag().
Trả 1 giá trị là 1 con số cụ thể chỉ vị trí trước 1 giá trị được xác định tại đầu
vào của hàm. (Index)
Cú pháp :
Member_Expression.Lag(Index)
- Index : vị trí mức độ xác định bởi một hệ thống phân cấp nào đó.
- Index = 0 : Trả về chính bản than nó.
- Index = 1 : Trả về giá trị kề trước
- Index = -1 : Trả về giá trị kế tiếp
- Index = n : Trả về giá trị kề -n
Select [Dim Employee].[Full Name].[Laura Callahan].lag(1) on 0
from [Cube_NorthwindDW]
Where [Measures].[Total]
15
Hàm Lead(index) cũng là một hàm tương tư với Lag, tuy nhiên ứng với cùng một
giá trị Index thì hai hàm có chiều di chuyển ngược nhau.
4. Tài liệu tham khảo.
[1] Thư mục MDX (tài liệu tham khảo môn học) _ ThS.Hồ Trung Thành.
[2] Nghiên cứu công nghệ OLAP và ứng dụng _ Trần Vĩnh Tiến Đức, Nguyễn Phú
Thịnh.
[3] Áp dụng Data Warehouse trong phân tích thông tin về các dịch vụ giá trị gia
tăng trên điện thoại_ Nguyễn Lương Thái Đức.
[4] Đồ án môn học Phân tích số liệu_ Nhóm 15 (K07406).
[5]
[6]
[7]
[8]
[9]
5. Kết luận.
Nội dung của tiểu luận này là một cái nhìn tổng quan về khả năng truy vấn và phân
tích dữ liệu của ngôn ngữ MDX. Tiểu luận đã nêu được rằng MDX là gì, cách trích
xuất, truy vấn dữ liệu từ khối dữ liệu đa chiều bằng MDX như thế nào,… cùng với
một số vấn đề khác mà nhóm nghiên cứu đã rút ra được sau khi tham khảo nhiều
nguồn tài liệu và thực hành.
Không chỉ riêng trong các CSDL quản lý hàng hóa như CSDL Northwind được
dùng để minh họa, MDX cũng có thể được ứng dụng rộng rãi để có thể truy
vấn,trích xuất dữ liệu trong các CSDL của các hoạt động kinh doanh khác trong
doanh nghiệp. Có thể nói MDX là một công cụ đắc lực hỗ trợ cho các doanh nghiệp
nhìn nhận lại toàn diện các hoạt động đã qua của mình, cũng như tìm ra, dự báo
những xu thế, nhưng nhu cầu mới trong tương lai để có thể đón đầu nhịp phát triển
của thị trường, nắm bắt được đúng lúc các cơ hội tiềm năng, là những điều mang
yếu tố quyết định trong thành bại của một doanh nghiệp.