【发布时间】:2014-04-18 12:57:18
【问题描述】:
我正在尝试在MDX 中创建一个度量来获取所选期间的第一天(我有一个 YMD 日期维度)。我正在使用EXISTING 函数来获取选定的成员。如果我只在 Excel 数据透视表过滤器中选择一个维度成员,它工作正常。但是,一旦我选择了多个成员(例如:2012 和 2013 一起),EXISTING 函数就无法按预期工作。
我创建了另一种方法来调试并查看发生了什么。度量定义为:
SetToStr(EXISTING([Date].[Date YMD].[Year].members))
如果我只选择了一个维度成员,这可以正常工作,我会返回:
{[日期].[YMD 日期].[全部].[2013]}
但是,当我同时选择 2012 和 2013 时,我会返回所有维度成员的列表:
{[Date].[Date YMD].[All].[N/A],[Date].[Date YMD].[All].[2007],[Date].[Date YMD].[All].[2008],[Date].[Date YMD].[All].[2009],[Date].[Date YMD].[All].[2010],[Date].[Date YMD].[All].[2011],[Date].[Date YMD].[All].[2012],[Date].[Date YMD].[All].[2013],[Date].[Date YMD].[All].[2014]}
EXISTING 功能似乎只在选择单个成员时才起作用?
--
更新:
也许我在原始帖子中不够清楚。我面临的问题是获取第一个和最后一个日期成员如果正在过滤日期维度(在 Excel 数据透视表过滤器中)并且在过滤器中选择了多个日期成员(例如:当年份2012 年和 2013 年一起选择)。
我尝试使用此处的解决方案:http://bimic.blogspot.com/2011/07/mdx-rewrite-query-with-currentmember.html,但没有成功。
我现在创建了 2 个度量:
- 首日单曲:
HEAD( DESCENDANTS( [Date].[Date YMD].CURRENTMEMBER, [Date].[Date YMD].[Day] ), 1 ).ITEM(0).member_value
- 多年第一天
MIN(EXISTING [Date].[Date YMD].[Year].members, [Measures].[First Day Single])
很遗憾,我无法直接包含屏幕截图。你可以在这个链接上看到它:http://social.msdn.microsoft.com/Forums/getfile/446659
如您所见,当您在数据透视表过滤器中选择一年时,度量值有效,但在您选择超过一年时无效。
【问题讨论】:
-
您使用什么工具来添加这个新度量?您是通过 SQL-Server Management Studio 编写此 MDX,还是使用 Excel 连接到您的多维数据集?
-
我正在使用 OLAP 数据透视表扩展。
-
第一天不取决于当前的粒度吗?假设您选择了 2012 年和 2013 年 2 年,它将选择第一年的第一天 - 即 2012 年 1 月 1 日。这不是正确的吗?
-
嗨斯蒂芬!是的,我预计会在第一年的第一天回来(例如 1.1.2012),但事实并非如此。如果选择了多年,我发布的代码将不起作用。看截图:social.msdn.microsoft.com/Forums/getfile/446659
-
@StephenBorg 这是我们所期望的,但不是观察到的行为