我想将TimeStamp t1的数据提取到t2。但是t1和t2可能不一定在我的数据库表中。所以,我想要的是:它应该找到大于或等于t1的下一个可用时间戳(如果t1不在db表中,则为> t1,如果存在,则为t1),最后可用的时间戳小于或等于t2(如果t2不存在,则为< t2;如果db1查询本身存在,则为t2)。
.FirstSibling,.LastSibling,.FirstChild,.LastChild,.NextMember,.LastMember,HEAD,TAIL对我不起作用,因为我希望时间戳为> = t1和< = t2(两者均可用) D b)。 我该怎么办?
答案 0 :(得分:0)
用MDX以这种方式摆弄日期可能会很痛苦。我过去做了类似的事情,将Name
或Caption
转换为字符串/数字/日期,并将其与输入参数t1和t2进行比较(类似地转换为字符串/数字/日期)格式相同)。
也许t1是一个字符串“31/12/2010”,你的多维数据集包含[时间]等成员。[所有时间]。[2010]。[12月]。[29]那么你需要将两者转换成一种通用格式进行比较。 MDX提供了诸如MemberToStr()
之类的方法,它们将为您提供.CurrentMember
的字符串表示,并让您比较两者。
VBA函数可用于某些MDX版本,因此您可以使用Replace
和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(转换为日期对象)小于或等于的那些你的输入字符串(转换为日期对象)。