我正在创建一些动态生成MDX查询的工具。在我生成的查询的一部分中,我需要检查表达式是否是成员表达式或元组表达式,并在其上应用不同的逻辑。有没有人知道如何通过使用MDX在运行时检查MDX表达式类型?
答案 0 :(得分:1)
要知道MDX表达式的确切类型,您必须编写MDX解析器(至少对于可能出现的表达式)。
有一些规则:(x, y)
之类的东西可能是一个元组;并且返回元组的所有方法的结果(如StrToTuple
,Root
或Item
,后者仅在应用于集合时)是一个元组,并且是所有方法的结果返回一个成员(如Ancestor
或DefaultMember
,如果应用于元组也是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>)