替换查询字符串中的 MDX 参数

Replacing MDX Parameters in Query String

我是 MDX 查询的新手,无法弄清楚如何正确使用 adomd 参数。我正在使用的查询字符串如下所示:

Select {
    [Measures].[Unit On Order], 
    [Measures].[Cost On Order], 
    [Measures].[Retail On Order] 
} on columns, 
NON EMPTY 
{ 
    [Product].[Universal Customer Choice Code].&[@GlobalId] 
} 
* 
{ 
    [Date].[01 - Fiscal Week].[@StartFiscalWeek] : [Date].[01 - Fiscal Week].[@EndFiscalWeek] 
} on rows 
from [Buy Plan] 
where ( 
    [Brand].[Brand].[@Brand], 
    [Market].[Market].[@Market], 
    [Reporting Currency].[Reporting Currency].&[@ReportingCurrency]
    )

我一直在添加这样的参数:

 var parameter = command.CreateParameter();
 parameter.ParameterName = argument.Key;
 parameter.Value = argument.Value;
 command.Parameters.Add(parameter);

当我手动替换@parameters时,结果是有值的。但是,我无法使用 Adomd 参数执行相同的操作。我见过一些人建议使用 StrToSet() 和 StrToMember()。我对两者都不熟悉,也无法弄清楚 Set 和 Member 之间的区别。

我想我所需要的只是知道如何正确格式化我的 QueryString。在此先感谢您的帮助!

天哪,我想通了!对于那些知道如何使用 MDX 的人来说,这可能是一个简单的答案,但也许这对其他人有用。

我的第一个问题:我的参数格式不正确。

 var param_wrong = new AdomdParameter("@Global", 012345);

这是不正确的,因为“@”不应包含在参数声明中,而只能包含在查询字符串中。

 var param_almost_correct = new AdomdParameter("Global", 012345);

我的第二个问题:我的初始查询字符串不包括 StrToMember。我终于想出了如何使用它。 StrToMember 应包括整个字段。现在参数应该反映这一点。

 var param_correct = new AdomdParameter("Global", [Product].[Universal Customer Choice Code].[000113416000]);

第三个问题和最后的更改是创建格式正确的查询字符串,如下所示。

   Select { 
   [Measures].[Unit On Order], 
   [Measures].[Cost On Order], 
   [Measures].[Retail On Order] } 
   on columns, 
   NON EMPTY {  
      StrToMember(@GlobalId) } * 
     { StrToMember(@StartFiscalWeek) : StrToMember(@EndFiscalWeek) } 
   on rows from [Buy Plan] 
   where( 
      StrToMember(@Brand), 
      StrToMember(@Market), 
      StrToMember(@ReportingCurrency) ) 

但是,我确实还有一些问题。为什么参数和 StrToMember 要求使用整个字段?为什么我不能让查询字符串看起来像:

 [Product].[Universal Customer Choice Code].[StrToMember(@GlobalId)]

我这样试过,但没有用。

由于评论很长,将其添加为答案。

However, I do have some remaining questions. Why does the parameter and StrToMember require that the whole field be used? Why can't I just have the query string look like:

[Product].[Universal Customer Choice Code].[StrToMember(@GlobalId)]

很难解释为什么,这就是语法!您不能在这样的语句中使用 StrToMember

另一种构建查询的方法是:

StrToMember("[Product].[Universal Customer Choice Code].[" + @GlobalId + "]")

看到这里发生了什么吗?

@GlobalID 从您的报告中传递的是一个字符串值。您可以将此值连接到静态字符串并将其转换为格式正确的成员定义。下一步是使用 StrToMember 函数将此字符串转换为 member

请注意,如果您以后打算添加更多成员,则 StrToMember 功能将不再有效。您将不得不使用 StrToSet.

希望对您有所帮助。