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 时所犯的常见错误的指南,那就太好了。
首先,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)
请记住,轴COLUMNS和ROWS轴只是速记名称,您也可以这样做:
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 不会跟上。
由于 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 次 |
| 最近记录: |