替换查询字符串中的 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
.
希望对您有所帮助。
我是 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
.
希望对您有所帮助。