T-SQL 和 MDX 之间最相关的相似之处是什么?

Edm*_*und 2 sql-server learning ssas t-sql mdx

我使用过 T-SQL(CTE、窗口函数、递归 CTE、大数据、表值函数、APPLY、PIVOT、存储过程等),但从未查询过 Microsoft SSAS 多维数据集。

对于以下 T-SQL 概念,MDX 中是否有类似的概念?

  • 转轴
  • 窗口函数
  • 递归公用表表达式

使用 MDX 的 T-SQL 用户是否有任何陷阱?

我希望 T-SQL 和 MDX 之间有一些共同的类比,这将有助于擅长 T-SQL 的人过渡到 MDX。

如果有一个关于从 T-SQL 进入 MDX 时所犯的常见错误的指南,那就太好了。

Tom*_*m V 6

一般注意事项

首先,T-SQL 和 MDX 是两种完全不同的野兽。SQL 用于查询表格关系数据,而 MDX 用于查询多维数据。

我将首先解决您关于常见错误的问题。在我看来,最常见的错误是尝试将 SQL 知识应用于 MDX。你真的需要进入多维思维模式,忘记在关系结构中思考。

例如,您不查询列和行,而是对维度和度量进行切片。例如,请参阅我的答案here

MDX 中几乎唯一与 SQL 类似的事实是,您有 a SELECTand aFROM和 aWHERE子句,但 MDX 不一定返回行和列,而是返回“轴”,其中您可以有 2 个以上。

解决你的一些观点可能会告诉你为什么 SQL 概念不映射到 MDX 概念:

枢轴和逆枢轴

在 MDX 中您几乎不会这样做。如果您查看MDX 选择语法,您将看到这样的示例(在这种情况下返回二维结果):

SELECT   
    [Date].[Calendar].[First8Months2003] ON COLUMNS,  
    [Product].[Category].Children ON ROWS  
FROM  
    [Adventure Works]  
WHERE  
    [Measures].[Order Quantity]  
Run Code Online (Sandbox Code Playgroud)

说,你想旋转那个结果集,你只需交换轴:

SELECT   
    [Product].[Category].Children ON COLUMNS,  
    [Date].[Calendar].[First8Months2003] ON ROWS  
FROM  
    [Adventure Works]  
WHERE  
    [Measures].[Order Quantity]  
Run Code Online (Sandbox Code Playgroud)

请记住,轴COLUMNSROWS轴只是速记名称,您也可以这样做:

SELECT   
    [Product].[Category].Children ON 0,  
    [Date].[Calendar].[First8Months2003] ON 1  
FROM  
    [Adventure Works]  
WHERE  
    [Measures].[Order Quantity]  
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以添加第三个轴和第四个轴(并且如果您的客户端支持渲染),因此结果不是表格而是多维单元集。

显然,当结果集中有 2 个以上的轴时,pivot 和 unpivot 不会跟上。

递归 CTE

由于 MDX 不返回“表”,因此没有表表达式之类的东西。如果您需要,您可以在计算的度量中进行递归

当您遇到WITH关键字时,它定义了Query-Scoped Calculated Members

窗口函数

窗口函数在 MDX 中也没有用处,因为它们用于计算已在多维数据集中计算的内容和计算的度量。该OVER子句几乎是您放置在轴上的维度成员。

以运行总数为例。在 SQL 中,你会写一些类似的东西

SELECT SUM(internet_sales) OVER (ORDER BY date) AS running_total
FROM sales;
Run Code Online (Sandbox Code Playgroud)

但是,在 MDX 中,您将有一个日历维度和一个销售额度量,并且您的 MDX 将类似于:

WITH MEMBER [Measures].[Sum from start]
AS
SUM ({NULL:[Date].[Calendar].CurrentMember},
[Measures].[Internet Sales Amount])
SELECT {[Measures].[Internet Sales Amount],[Measures].[Sum from start]} ON 0 ,
[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works]
Run Code Online (Sandbox Code Playgroud)

结论

如您所见,尝试通过应用 T-SQL 原则来解决 MDX 问题,您很可能会遇到问题。

如果你想学习 MDX,你需要把 MDX 当作一种全新的语言而不是一种新的语法来学习,因为它就是这样,一种不同的语言而不是 SQL 方言。


归档时间:

查看次数:

208 次

最近记录:

7 年,11 月 前