使用 MDX 以这种方式摆弄日期可能会很痛苦。我过去做过类似的事情,方法是将 aName
或转换Caption
为字符串/数字/日期,并将其与输入参数 t1 和 t2 进行比较(类似地转换为相同格式的字符串/数字/日期)。
也许 t1 是一个字符串“31/12/2010”,并且您的多维数据集包含诸如 [Time].[All Time].[2010].[December].[29] 之类的成员 那么您将需要将两者转换为通用格式进行比较。MDX 提供了一些方法,例如,MemberToStr()
这些方法将为您提供 的字符串表示形式.CurrentMember
并让您比较两者。
VBA 函数可用于某些类型的 MDX,因此您可以使用Replace
and操作字符串InStr
,甚至可以调用函数CDate()
来获取与输入参数形式相同的值。
您最终的 MDX 可能看起来像这样......虽然我已经大大简化了将成员的 Caption 转换为 CDate 函数将接受的字符串所需的操作:
SELECT
{Filter({[Time].[Day].members}, CDate([Time].CurrentMember.Caption) <= CDate("2010-12-31"))} ON ROWS,
[Measures].[Something] ON COLUMNS
FROM [CubeName]
ROWS 子句首先在 [Day] 级别获取所有 [Time] 成员的集合,然后过滤该集合以仅保留 Caption(转换为日期对象)小于或等于您的输入字符串的那些(转换为日期对象)。