MDX:这两个查询有什么区别

MDX: What is the difference of these both queries

MDX: 这些查询有什么区别,我用的是adventure works数据库。

SELECT 
{[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY ([Product].[Category].[Category] ,
          [Date].[Calendar Year].[Calendar Year])ON ROWS
FROM [Adventure Works]

GO

SELECT 
{[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY ([Product].[Category].[Category] *
          [Date].[Calendar Year].[Calendar Year])ON ROWS
FROM [Adventure Works]

这两个脚本是一样的。

这实际上是将一组元组放在行上 - 您已经使用大括号 (...)

显式定义了元组
SELECT 
  {[Measures].[Internet Sales Amount]} ON COLUMNS
 ,NON EMPTY 
    (  //<<start of tuple
      [Product].[Category].[Category]
     ,[Date].[Calendar Year].[Calendar Year]
    ) ON ROWS
FROM [Adventure Works];

第二个脚本是通过星号运算符的交叉连接*:

SELECT 
  {[Measures].[Internet Sales Amount]} ON COLUMNS
 ,NON EMPTY 
    [Product].[Category].[Category] * [Date].[Calendar Year].[Calendar Year] ON ROWS
FROM [Adventure Works];

当您对 crossjoin 执行操作时,它 returns 一组元组 - 所以您最终会得到相同的单元格集。

您可以编写交叉连接而不是使用星号 - 虽然星号是现代 mdx 脚本中最常用的符号:

SELECT 
  {[Measures].[Internet Sales Amount]} ON COLUMNS
 ,NON EMPTY 
    CrossJoin
    (
      [Product].[Category].[Category]
     ,[Date].[Calendar Year].[Calendar Year]
    ) ON ROWS
FROM [Adventure Works];