这是一个普通的“销售”数据库:
CREATE TABLE Sales(id INT, category VARCHAR(50), item VARCHAR(50), date DATE, amount DECIMAL(10, 2));
INSERT INTO Sales VALUES
(1, 'Memory', 'Corsair 16GB', '2021-01-01', 200),
(2, 'Storage', 'Seagate BarraCuda 2TB', '2021-01-02', 50),
(3, 'Storage', 'Samsung 980 1TB', '2021-01-02', 150),
(4, 'OS', 'Windows 11', '2021-01-02', 150),
(5, 'OS', 'Ubuntu', '2021-01-03', 15),
(6, 'DBMS', 'MySQL Enterprise Edition 8', '2021-01-03', 5000),
(7, 'DBMS', 'SQL Server 2022', '2021-01-04', 15000),
(8, 'Memory', 'Corsair 16GB', '2021-01-04', 200),
(9, 'Memory', 'G.Skill Trident 32GB', '2021-01-04', 250),
(10, 'OS', 'Ubuntu', '2021-01-05', 15),
(11, 'DBMS', 'SQL Server 2022', '2021-01-06', 15000),
(12, 'DBMS', 'MySQL Enterprise Edition 8', '2021-01-06', 5000);
我们从中构建了一个具有 3 个维度的SSAS 多维立方体:
Category
带属性Name
,Item
带属性Name
,Date
带属性Date
。
到目前为止,一切都很好。
现在创建一些措施来获得沿某些维度的最大数量:
WITH
MEMBER [Max Daily Sale] AS MAX([Date].[Date].Children, [Amount])
MEMBER [Max Category Sale] AS MAX([Category].[Name].Children, [Amount])
MEMBER [Max Category Daily Sale] AS MAX(([Category].[Name].Children, [Date].[Date].Children), [Amount])
MEMBER [Max Item Daily Sale] AS MAX(([Item].[Name].Children, [Date].[Date].Children), [Amount])
MEMBER [Max Item Sale] AS MAX([Item].[Name].Children, [Amount])
它们工作正常,除非 MDX 查询中使用的维度之一也用于度量。
举个例子:
SELECT
[Category].[Name].Children ON ROWS,
--[Item].[Name].Children ON ROWS,
--[Date].[Date].Children ON ROWS,
{ Amount, [Max Daily Sale], [Max Category Sale], [Max Category Daily Sale], [Max Item Sale], [Max Item Daily Sale] } ON COLUMNS
FROM Sales
给出:
Amount Max Daily Sale Max Category Sale Max Category Daily Sale Max Item Sale Max Item Daily Sale
DBMS 40000 20000 (null) (null) 30000 15000
Memory 650 450 (null) (null) 400 250
OS 180 150 (null) (null) 150 150
Storage 200 200 (null) (null) 150 150
使用维度 和 的所有Category
度量[Max Category Sale]
都会[Max Category Daily Sale]
导致NULL
。
同样,使用[Item].[Name]
作为ROWS
轴将“打破”[Max Item Sale]
和[Max Item Daily Sale]
措施。
[Max Daily Sale]
使用,[Max Category Daily Sale]
和[Max Item Daily Sale]
,以此类推[Date].[Date]
。
这显然是我缺少的一些 MDX 琐事,但是哪一个呢?