我认为 MDX 主要旨在成为一种查询语言,因此该SELECT
语句是最进化的语句。还有一些其他的DML语句,例如UPDATE CUBE
, DRILLTHROUGH
, or CALL
,但除了 之外UPDATE
,它们都只是读取数据,并且使用频率较低。
然后,还有一些DDL命令,但这些命令仅限于对现有多维数据集或当前查询会话的轻微调整,您无法使用 MDX 创建新的多维数据集或维度。创建多维数据集或更改维度等的 SSAS 的“真正的 DDL 命令”是 XMLA 命令,而不是 MDX 语句。
DCL语句与 MDX 类似GRANT
或REVOKE
不可用。
对于您在 SQL 中找到的第四类语句,诸如语句(相对于表达式)或循环结构之类的过程语句,以及服务器端游标,MDX 也不提供任何支持。这些语句是 SQL 的一部分,在 Oracle、SQL Server、DB2、mySQL 等不同 DBMS 之间不是很标准化,仅举几例,而基本的 DML 和 DDL 或多或少是标准化的——在某种程度上,所有主要的关系数据库支持ANSI SQL。即使对于关系数据库,这通常也是后来的附加组件,主要用于存储过程、触发器(作为过程的特殊情况)和批处理。MySQL 被广泛使用多年,但不支持仅在版本 5 中引入的这些语句。if
if
对于存储过程,Analysis Services 依赖于 COM(已弃用)和 .net,您可以在其中拥有完整的过程功能,并使其对象模型可用于 .net 或 COM。无论如何,存储过程支持仅限于返回一个对象的函数(可能像包含大量数据的 MDX 集一样复杂)或返回结果集的过程。后者不能与其他 MDX 语句交互,而只能用CALL procname(parameters)
. 对于批处理,MDX 仅依赖调用批处理的托管环境来执行所有条件分支和循环。
事实上,MDX 的使用比 SQL 更受限制,所以在某种程度上,它只是一种“领域特定语言”,在某些用途上非常好,但在它不适用的领域有很多弱点。