2

我有一个要过滤的日期维度。为此,我使用 MDX Range (:) 运算符。问题是范围边界似乎必须是集合的有效成员。我的日期维度中有 IntDate 属性,它是 YYYYMMDD 格式的整数。当我浏览维度时,有 20120705 和 20120706 值,但没有 20120704 或 20120707。不过,就范围而言,20120705:20120706 和 20120704:20120707 都包含 20120705 和 2012070606,我希望 2012 和 2012205当第一个按预期工作时,第二个返回空集。我需要宽松范围才能工作的原因是用户可能输入的日期范围不是基于维度中的数据。我怎样才能使这项工作?

一个有效的: 在此处输入图像描述

返回空集的那个。 在此处输入图像描述

谢谢你,弗拉德。

4

1 回答 1

2

由于您的 20130707 成员不存在,因此多维数据集无法知道它应该去哪里。

您的日期维度不包含一个月中的所有日期,这似乎很奇怪。我建议重新填充您的日期维度,以便它具有所有日期。如果使用表格多维数据集,则可以从Azure 数据市场获取完全填充的日期维度。如果您使用的是多维,您可以让 SSAS 为您生成一个。如果您有根据日期构建的参数,您可以限制列表以填充它们以仅显示存在使用 Exists 的度量的数据。

我还想知道为什么您希望用户输入日期而不是从有效列表中选择日期。当它们输入一个完全无效的值时,你如何处理错误?似乎最简单/最安全的选择是为他们提供可供选择的日期列表。如果他们输入的内容没有数据并且您有错误处理,则结果应该与他们从有效列表中选择的结果相同。

话虽这么说,你应该能够像下面这样。我检查日期是否为有效成员。如果不是,我会替换我在成员列表中找到的第一个有效成员(您可以选择自己的日期并将其插入其中)。对于范围的末尾,我找到最后一个有效成员(同样,您可以替换自己的值)。

    {Iif(Count(Exists([Date].[Int Date].members, [Date].[Int Date].[20130704]))>0,[Date].[Int Date].[20130704], [Date].[Int Date].firstchild):
 Iif(Count(Exists([Date].[Int Date].members, [Date].[Int Date].[20130707]))>0,[Date].[Int Date].[20130707], [Date].[Int Date].lastchild)}
于 2013-07-13T18:22:44.893 回答