2

我想获取时间戳 t1 到 t2 的数据。但 t1 和 t2 可能不一定在我的数据库表中。所以,我想要的是:它应该找到大于或等于 t1 的下一个可用时间戳(> t1 如果 t1 在 db 表中不存在,或者 t1 如果它存在)并且最后一个可用时间戳小于或等于 t2(< t2 如果 t2 不存在或 t2 如果它在 db 中)在 MDX 查询本身。

.FirstSibling、.LastSibling、.FirstChild、.LastChild、.NextMember、.LastMember、HEAD、TAIL 对我不起作用,因为我希望时间戳为 >= t1 和 <= t2(两者都在 db 中可用)。我该怎么做?

4

1 回答 1

0

使用 MDX 以这种方式摆弄日期可能会很痛苦。我过去做过类似的事情,方法是将 aName或转换Caption为字符串/数字/日期,并将其与输入参数 t1 和 t2 进行比较(类似地转换为相同格式的字符串/数字/日期)。

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

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

于 2011-11-27T00:01:37.273 回答