如何检查MDX表达式的类型?

时间:2013-11-18 03:13:55

标签: ssas mdx olap

我正在创建一些动态生成MDX查询的工具。在我生成的查询的一部分中,我需要检查表达式是否是成员表达式或元组表达式,并在其上应用不同的逻辑。有没有人知道如何通过使用MDX在运行时检查MDX表达式类型?

1 个答案:

答案 0 :(得分:1)

要知道MDX表达式的确切类型,您必须编写MDX解析器(至少对于可能出现的表达式)。

有一些规则:(x, y)之类的东西可能是一个元组;并且返回元组的所有方法的结果(如StrToTupleRootItem,后者仅在应用于集合时)是一个元组,并且是所有方法的结果返回一个成员(如AncestorDefaultMember,如果应用于元组也是Item)是成员。有关按类型分类的功能列表,请参阅http://msdn.microsoft.com/en-us/library/ms145970.aspx。但是你已经看到了Item方法的难度,它可以根据上下文提供元组或成员。

我不认为您可以轻松编写测试类型的MDX语句,因为Analysis Services使用自动类型转换,只要上下文需要,就会将成员转换为元组。

从我的角度来看,最好的方法是使用允许使用成员和元组的语法,并避免必须知道类型。

一种方法可以正常工作而无需显式检查数据类型,只是检查某些构造是否有效将使用VBA函数IsError,如下所示:

IIf(IsError(x.Level, <something avoiding the Level function>, <use x.Level>)