MDX:这两个查询有什么不同

时间:2016-04-12 11:56:30

标签: mdx

MDX:这些查询有什么不同,我正在使用冒险作品数据库。

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]

1 个答案:

答案 0 :(得分:1)

这两个脚本是相同的。

这实际上是在行上放置了一组元组 - 你已经使用大括号(...)明确地定义了元组

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时,它会返回一组元组 - 因此您最终会得到相同的单元格集。

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

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