Mdx 蒙德里安的日期范围
我想获取时间戳t1到t2的数据。但t1和t2可能不一定在我的数据库表中。所以,我想要的是:它应该在MDX查询本身中找到下一个大于或等于t1的可用时间戳(如果t1不在db表中,则大于t1,如果t1在db表中,则大于t1),以及小于或等于t2的最后一个可用时间戳(如果t2不在db中,则小于t2,如果t2在db中)Mdx 蒙德里安的日期范围,mdx,olap,mondrian,Mdx,Olap,Mondrian,我想获取时间戳t1到t2的数据。但t1和t2可能不一定在我的数据库表中。所以,我想要的是:它应该在MDX查询本身中找到下一个大于或等于t1的可用时间戳(如果t1不在db表中,则大于t1,如果t1在db表中,则大于t1),以及小于或等于t2的最后一个可用时间戳(如果t2不在db中,则小于t2,如果t2在db中) .FirstSibling、.LastSibling、.FirstChild、.LastChild、.NextMember、.LastMember、HEAD、TAIL对我不起作用,因为我希
.FirstSibling、.LastSibling、.FirstChild、.LastChild、.NextMember、.LastMember、HEAD、TAIL对我不起作用,因为我希望时间戳>=t1,而用MDX这种方式处理日期可能会很痛苦。我过去也做过类似的事情,将
名称
或标题
转换为字符串/数字/日期,并将其与输入参数t1和t2进行比较(类似地转换为相同格式的字符串/数字/日期)
也许t1是一个字符串“31/12/2010”,并且多维数据集包含[Time].[All Time].[2010].[December].[29]等成员,那么您需要将两者转换为通用格式进行比较。MDX提供了一些方法,例如MemberToStr()
,这些方法将为.CurrentMember
提供一个字符串表示形式,并允许您比较两者
VBA函数可以在某些风格的MDX中使用,因此您可以使用Replace
和InStr
操作字符串,甚至可以调用CDate()
等函数来获取与输入参数形式相同的值
您最终的MDX可能看起来像这样……尽管我已经大大简化了将成员标题转换为CDate函数将接受的字符串所需的操作:选择
{Filter({[Time].[Day].members},CDate([Time].CurrentMember.Caption)用MDX以这种方式摆弄日期可能会很痛苦。我过去也做过类似的事情,将Name
或Caption
转换为字符串/数字/日期,并将其与输入参数t1和t2进行比较(类似地转换为相同格式的字符串/数字/日期)
也许t1是一个字符串“31/12/2010”,并且多维数据集包含[Time].[All Time].[2010].[December].[29]等成员,那么您需要将两者转换为通用格式进行比较。MDX提供了MemberToStr()等方法
这将为您提供.CurrentMember
的字符串表示形式,并让您比较两者
VBA函数可以在某些风格的MDX中使用,因此您可以使用Replace
和InStr
操作字符串,甚至可以调用CDate()
等函数来获取与输入参数形式相同的值
您最终的MDX可能看起来像这样……尽管我已经大大简化了将成员标题转换为CDate函数将接受的字符串所需的操作:
选择
{Filter({[Time].[Day].members},CDate([Time].CurrentMember.Caption)