为什么沿同一维度投影时 MAX 为 NULL



这是一个普通的"Sales"数据库:

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]度量。

使用[Date].[Date]时,[Max Daily Sale][Max Category Daily Sale][Max Item Daily Sale]以此类推。

这显然是我缺少的一些MDX琐碎,但哪一个呢?

你观察到的是正确的。每个维度只能在 MDX 的一个部分中使用:行、列、WHERE 子句或计算成员。有时 MDX 语句似乎违反了该规则,但仔细观察,您会发现维度仅以一种一致的方式使用。

有很多方法可以解决这个问题,通常使用[Dimension name].currentMember但我不确定对您的特定情况有什么建议。这份报告可以分解成单独的报告吗?

最新更新