蒙德里安的日期范围

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 以这种方式摆弄日期可能会很痛苦。我过去做过类似的事情,将NameCaption 转换为字符串/数字/日期,并将其与输入参数 t1 和 t2 进行比较(类似地转换为相同格式的字符串/数字/日期)。

也许 t1 是一个字符串“31/12/2010”,而您的多维数据集包含 [Time].[All Time].[2010].[December].[29] 等成员那么您将需要将两者转换为通用格式进行比较。 MDX 提供了诸如MemberToStr() 之类的方法,它将为您提供.CurrentMember 的字符串表示形式,并让您比较两者。

VBA 函数可用于某些类型的 MDX,因此您可以使用 ReplaceInStr 操作字符串,甚至调用 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(转换为日期对象)小于或等于的那些您的输入字符串(转换为日期对象)。

【讨论】:

以上是关于蒙德里安的日期范围的主要内容,如果未能解决你的问题,请参考以下文章

在 Mondrain Schema 中定义时间维度?

蒙德里安的梦想Poj2411

mondrian mdx 过滤日期维度中年份级别的集合

蒙德里安有本地客户吗? [关闭]

AcWing 291.蒙德里安的梦想

蒙德里安模式 uniqueMembers