MTD даст вам набор дат от первой даты месяца до указанной даты.Если вы хотите получить месяц, вы можете использовать ANCESTOR или PARENT .Родитель будет работать, если в вашей иерархии месяц находится прямо над датой.Разница между SUM (MTD (дата), мера) и (date.parent, мера) очевидна, когда вы думаете о предыдущих месяцах - если вы переходите на месяц, который находится вПрошлый MTD даст вам частичные результаты в отличие от самого члена месяца (для дат, отличных от последней даты месяца).
StrToMember по существу переводитстрока для выражения члена в MDX.Нет никакой разницы (функционально) между записью:
([Time].[Month].&[201001], [Measures].[SomeMeasure])
и
(StrToMember("[Time].[Month].&[201001]"), [Measures].[SomeMeasure])
Было бы интересно услышать, в чем именно заключается ошибка, когда вы выполняете свое нерабочее выражение по порядкудля отладки.
Если вы просто хотите получить месячную сумму для меры, вы должны написать:
(StrToMember(@param).Parent, [Measures].[Retail sales amount...])
или (если у вас больше уровней между ними):
(Ancestor(StrToMember(@param),
[Time calendar].[<hierarchy>].[<month level>]),
[Measures].[Retail sales amount...])
Кроме того, при использовании MTD вы хотите написать:
SUM(MTD(<date member>), [Measure].[Some Measure])
вместо
MTD(<date member>, [Measure].[Some Measure])
взглянуть на определение BOLМПД