C# windows窗体C中形成的动态mdx查询中的转义百分比字符(%)#

C# windows窗体C中形成的动态mdx查询中的转义百分比字符(%)#,c#,dynamic,mdx,C#,Dynamic,Mdx,如何在动态MDX中转义“%”字符。我希望在MDX中将“%”视为文字,而不是通配符。 以下是正在发生的事情的基本概念: 我有一个windows窗体(使用c#),用户可以在其中为MDX查询创建一个动态搜索表达式。 例如。 货币包含美国 如果“货币”是静态的,则条件“包含”是一个下拉可选值,然后是一个“我们”文本框 因此,用户点击“搜索”,并根据上述条件形成一个动态MDX,并发生立方体命中 现在,当查询如下时,我无法得到正确的结果: 计算包含50% 此处,%被视为通配符,并显示任何包含“50”的内容。

如何在动态MDX中转义“%”字符。我希望在MDX中将“%”视为文字,而不是通配符。 以下是正在发生的事情的基本概念: 我有一个windows窗体(使用c#),用户可以在其中为MDX查询创建一个动态搜索表达式。 例如。 货币包含美国

如果“货币”是静态的,则条件“包含”是一个下拉可选值,然后是一个“我们”文本框

因此,用户点击“搜索”,并根据上述条件形成一个动态MDX,并发生立方体命中

现在,当查询如下时,我无法得到正确的结果:

计算包含50%

此处,%被视为通配符,并显示任何包含“50”的内容。 请帮忙。我试过引号“”、方括号[]、反斜杠\、双字符%%。但是没有运气

更新:
这实际上是前端对用户的意义,在后端我使用分析存储过程“IsLike”来表示这一点。查询是这样的:{WITH MEMBER[Measures].[Search]作为IIF([ASSP].[IsLike]([Calculation].[Calculation].CurrentMember.Properties('MEMBER\u CAP‌​‌​选项“”,“%50%%”)}


谢谢

如果我正确理解了您的问题,那么您正在使用ASSP(分析存储过程)IsLike方法,并且想知道如何在like模板中转义
%
,以便逐字搜索。查看源代码(,方法
LikeToRegEx
),我看不出一个简单的方法来实现这一点。在这种方法中,百分比被无条件地替换为
“*”
。您可以做的是下载ASSP源代码,并更改此方法以允许转义百分比,例如使用
“[%]”“
,这将在SQL Server关系引擎
中像
一样工作。
你可以在后面加上

sb.Replace("[.]", @"_");
另一行

sb.Replace("[\.]", @"%");
这将使过度激进的
[%]
替换为
[.*]

然后您将编译此文件并重新部署。

如果我正确理解您的问题,那么您正在使用ASSP(分析存储过程)IsLike方法,并想知道如何在like模板中转义
%
,以便逐字搜索。查看源代码(,方法
LikeToRegEx
),我看不出一个简单的方法来实现这一点。在这种方法中,百分比被无条件地替换为
“*”
。您可以做的是下载ASSP源代码,并更改此方法以允许转义百分比,例如使用
“[%]”“
,这将在SQL Server关系引擎
中像
一样工作。
你可以在后面加上

sb.Replace("[.]", @"_");
另一行

sb.Replace("[\.]", @"%");
这将使过度激进的
[%]
替换为
[.*]

然后您将编译此文件并重新部署。

也许可以帮助您?
Contains
不是Analysis Services MDX函数。这是作为存储过程实现的吗?然后您必须询问该过程的开发人员他希望如何转义文本。它实际上是前端对用户的意思,在后端是“类似于”用于此。查询类似于以下内容:{WITH MEMBER[Measures].[Search]作为IIF([ASSP].[IsLike]([Calculation].[Calculation].[Calculation].CurrentMember.Properties('MEMBER\u CAP‌​厄尔,我经历了这一切,没有什么帮助。无论如何,谢谢:)也许可以帮助您?
Contains
不是Analysis Services MDX函数。这是作为存储过程实现的吗?然后您必须询问该过程的开发人员他希望如何转义文本。这实际上是用户的前端含义,在后端,“IsLike”用于此。查询类似于以下内容:{成员[Measures].[Search]为IIF([ASSP].[IsLike]([Calculation].[Calculation].[Calculation].CurrentMember.Properties('MEMBER_CAP‌​厄尔,我经历了这一切,没有什么帮助。无论如何,谢谢:)非常感谢,弗兰克。是的,你答对了我的问题。让我试试这个,然后再回复。这可能是我最接近解决问题的方法。非常感谢弗兰克。是的,你答对了我的问题。让我试试这个,然后再回复。这可能是我最接近解决问题的方法。谢谢弗兰克