如何使用SSAS中的MDX以计算成员的身份获取筛选视图中的月数

如何使用SSAS中的MDX以计算成员的身份获取筛选视图中的月数,ssas,mdx,olap-cube,Ssas,Mdx,Olap Cube,我必须将一个计算成员插入到现有的OLAP多维数据集中,但(遗憾的是)我真的不知道我在做什么 结果是当前筛选视图中匹配的月数。 我会得到所选年份的月份结果,但不会得到月份过滤器列表 我有: CREATE MEMBER CURRENTCUBE.[MEASURES].[AnzahlMonate] AS COUNT(Descendants( [Datum].[Datum - J - M - T].CurrentMember, [Datum].[Datum - J - M - T]

我必须将一个计算成员插入到现有的OLAP多维数据集中,但(遗憾的是)我真的不知道我在做什么

结果是当前筛选视图中匹配的月数。
我会得到所选年份的月份结果,但不会得到月份过滤器列表

我有:

CREATE MEMBER CURRENTCUBE.[MEASURES].[AnzahlMonate] AS 
COUNT(Descendants(
     [Datum].[Datum - J - M - T].CurrentMember, 
     [Datum].[Datum - J - M - T].[Monat]  ),EXCLUDEEMPTY )
,FORMAT_STRING = "0", 
VISIBLE = 1;
我得到:

我想得到:
[3]

我试过谷歌等,但显然没有找到正确的关键词

非常感谢你的帮助。提前准备好

--

我正在使用:
SQL Server 2014
SSMS 12.0.2456.0

Windows Server 2012 R2

我认为您的衡量标准是计算匹配月数,而不考虑过滤器/切片器中使用的其他维度。所以你每次都得到12分

您正在使用关键字
excludempty
,但您没有告诉MDX什么会使一个月变为空。MDX正在查看多维数据集的顶级视图。事实上,它根本不是看立方体中的数字,它只是看[基准]维度中有多少成员


编辑您的答案,告诉我们您正在使用的完整MDX,我们可能可以提供更多帮助。

我认为您的度量是计算匹配月数,而不考虑过滤器/切片器中使用的其他维度。所以你每次都得到12分

您正在使用关键字
excludempty
,但您没有告诉MDX什么会使一个月变为空。MDX正在查看多维数据集的顶级视图。事实上,它根本不是看立方体中的数字,它只是看[基准]维度中有多少成员

编辑您的答案,告诉我们您正在使用的完整MDX,我们可能会提供更多帮助。

您应该使用

COUNT(EXISTING Descendants(
     [Datum].[Datum - J - M - T].CurrentMember, 
     [Datum].[Datum - J - M - T].[Monat]  ) )
而不是

COUNT(Descendants(
     [Datum].[Datum - J - M - T].CurrentMember, 
     [Datum].[Datum - J - M - T].[Monat]  ),EXCLUDEEMPTY )
如果这不起作用,你可以试试

COUNT(EXISTING [Datum].[Monat].[Monat].Members  ) )
如果所有其他方法都失败了,另一种解决方案是根据日期维度表添加另一个度量值组,并在其中定义一个度量值,即月份id列的DistinctCount。

您应该使用

COUNT(EXISTING Descendants(
     [Datum].[Datum - J - M - T].CurrentMember, 
     [Datum].[Datum - J - M - T].[Monat]  ) )
而不是

COUNT(Descendants(
     [Datum].[Datum - J - M - T].CurrentMember, 
     [Datum].[Datum - J - M - T].[Monat]  ),EXCLUDEEMPTY )
如果这不起作用,你可以试试

COUNT(EXISTING [Datum].[Monat].[Monat].Members  ) )

如果所有其他方法都失败,另一个解决方案是根据日期维度表添加另一个度量值组,并在其中定义一个度量值,该度量值将是月份id列的DistinctCount。

当我使用GUI designe时,它不适用于我,因为筛选器不在当前上下文中:

with member [Months] AS 
sum(existing [Date].[Year Qtr Month].[Month].MEMBERS
,count(existing [Date].[Year Qtr Month].CurrentMember))

select [Months] on 0
FROM ( SELECT ( 
{ [Date].[Year Qtr Month].[Month].&[2018-03]
, [Date].[Year Qtr Month].[Month].&[2018-04]
, [Date].[Year Qtr Month].[Month].&[2018-05] } ) ON COLUMNS 
FROM [Some_Cube]) WHERE ( [Date].[Year Qtr Month].CurrentMember)
但当我手动添加过滤器时,它会起作用:

with member [Months] AS 
sum(existing [Date].[Year Qtr Month].[Month].MEMBERS
,count(existing [Date].[Year Qtr Month].CurrentMember))

select [Months] on 0
FROM [Some_Cube]
WHERE
{[Date].[Year Qtr Month].[Month].&[2018-03]
,[Date].[Year Qtr Month].[Month].&[2018-04]
,[Date].[Year Qtr Month].[Month].&[2018-05]}

当我使用GUI designe时,它对我不起作用,因为筛选器不在当前上下文中:

with member [Months] AS 
sum(existing [Date].[Year Qtr Month].[Month].MEMBERS
,count(existing [Date].[Year Qtr Month].CurrentMember))

select [Months] on 0
FROM ( SELECT ( 
{ [Date].[Year Qtr Month].[Month].&[2018-03]
, [Date].[Year Qtr Month].[Month].&[2018-04]
, [Date].[Year Qtr Month].[Month].&[2018-05] } ) ON COLUMNS 
FROM [Some_Cube]) WHERE ( [Date].[Year Qtr Month].CurrentMember)
但当我手动添加过滤器时,它会起作用:

with member [Months] AS 
sum(existing [Date].[Year Qtr Month].[Month].MEMBERS
,count(existing [Date].[Year Qtr Month].CurrentMember))

select [Months] on 0
FROM [Some_Cube]
WHERE
{[Date].[Year Qtr Month].[Month].&[2018-03]
,[Date].[Year Qtr Month].[Month].&[2018-04]
,[Date].[Year Qtr Month].[Month].&[2018-05]}

嗨,马格努斯,到目前为止是塔克斯。我想给你更多的信息。据我所知,我没有使用“更多”MDX来获得结果。如果我删除年份=2017过滤器。我得到该月级别的所有成员=120。如何让MDX查看多维数据集?如果我没有做到这一点,我会在视图中添加一列“201708201707,…”,以进行distinctcount(月)。由于我可能无法运行MDX,因此这是我的goto解决方案,作为最后一个选项。抱歉,我现在意识到您正在使用MDX在多维数据集上创建新度量值,因此您是对的,没有“更多”MDX。我的答案仍然是一样的:你只是在计算有多少成员处于该级别,而不管使用的过滤器是什么。很抱歉,我看不出还有什么能帮你的。好吧,不管怎样。我会努力找到一种方法,尊重有源滤波器。嗨,马格纳斯,到目前为止,thanx。我想给你更多的信息。据我所知,我没有使用“更多”MDX来获得结果。如果我删除年份=2017过滤器。我得到该月级别的所有成员=120。如何让MDX查看多维数据集?如果我没有做到这一点,我会在视图中添加一列“201708201707,…”,以进行distinctcount(月)。由于我可能无法运行MDX,因此这是我的goto解决方案,作为最后一个选项。抱歉,我现在意识到您正在使用MDX在多维数据集上创建新度量值,因此您是对的,没有“更多”MDX。我的答案仍然是一样的:你只是在计算有多少成员处于该级别,而不管使用的过滤器是什么。很抱歉,我看不出还有什么能帮你的。好吧,不管怎样。我将尝试找到一种方法,尊重有源滤波器.Thanx。但遗憾的是,我以前也得到过同样的结果。您用于测试结果的查询是什么样子的?Thanx。但遗憾的是,我以前也得到过同样的结果。您用于测试结果的查询是什么样子的?