蒙德里安的日期范围
Posted
技术标签:
【中文标题】蒙德里安的日期范围【英文标题】:Date Ranges in Mondrian 【发布时间】:2011-11-22 07:18:43 【问题描述】:我想获取时间戳 t1 到 t2 的数据。但 t1 和 t2 可能不一定在我的数据库表中。所以,我想要的是:它应该找到大于或等于 t1 的下一个可用时间戳(> t1 如果 t1 在 db 表中不存在,或者 t1 如果它存在)并且最后一个可用时间戳小于或等于 t2(
.FirstSibling、.LastSibling、.FirstChild、.LastChild、.NextMember、.LastMember、HEAD、TAIL 对我不起作用,因为我希望时间戳为 >= t1 和
【问题讨论】:
【参考方案1】:使用 MDX 以这种方式摆弄日期可能会很痛苦。我过去做过类似的事情,将Name
或Caption
转换为字符串/数字/日期,并将其与输入参数 t1 和 t2 进行比较(类似地转换为相同格式的字符串/数字/日期)。
也许 t1 是一个字符串“31/12/2010”,而您的多维数据集包含 [Time].[All Time].[2010].[December].[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(转换为日期对象)小于或等于的那些您的输入字符串(转换为日期对象)。
【讨论】:
以上是关于蒙德里安的日期范围的主要内容,如果未能解决你的问题,请参考以下文章