mdx - 如何减少 MDX Range 运算符的限制?

标签 mdx

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

有效的: enter image description here

返回空集的那个。 enter image description here

谢谢你, 弗拉德。

最佳答案

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

您的日期维度不包含一个月中的所有天数,这似乎很奇怪。我建议重新填充您的日期维度,以便它包含所有日期。您可以从 Azure data market 获取完全填充的日期维度。如果您使用的是表格立方体。如果您使用的是多维,您可以have SSAS generate one for you 。如果您有根据日期构建的参数,则可以限制列表以填充它们,以仅显示使用 Exists 进行度量的数据。

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

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

    {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)}

关于mdx - 如何减少 MDX Range 运算符的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624900/

相关文章:

sql-server - MDX DRILLTHROUGH 失败但选择可以成功执行

ssas - 使用 MDX 查询仅从 SSAS 多维数据集返回叶节点

multidimensional-array - SSAS MDX查询结果只有2维(矩阵),可以是 "3"(数据透视表)吗?

mdx - javascript 为 mdx 进行美化

ssas - 在 SSAS 中计算百分位数

mdx - 如何更改 Pentaho Mondrian 4 缓存生命周期?

ssas - MDX Aggregate() 用单个参数做什么?

olap - MDX 计算成员 CrossJoin 问题

tfs - 报告生成器 : How do MDX filter expressions work in Query Designer?

sql - 查看在 SSMS 中浏览多维数据集时生成的 MDX 查询