SSAS(MDX) - 根据另一个数据集过滤数据集

时间:2013-09-10 08:54:19

标签: reporting-services dataset report ssas mdx

我有一个关于多维数据集的mdx报告。作为分区编号报告参数的可用值,我有一个自动生成的数据集(dataset1,公司中的所有分区),查询如下所示:

WITH MEMBER [Measures].[ParameterCaption] AS
            [Dim Division].[Hierarchy].CURRENTMEMBER.MEMBER_CAPTION
     MEMBER [Measures].[ParameterValue] AS
            [Dim Division].[Hierarchy].CURRENTMEMBER.UNIQUENAME
     MEMBER [Measures].[ParameterLevel] AS
            [Dim Division].[Hierarchy].CURRENTMEMBER.LEVEL.ORDINAL
SELECT {[Measures].[ParameterCaption], [Measures].[ParameterValue], [Measures].[ParameterLevel]}
       ON COLUMNS ,
       [Dim Division].[Hierarchy].ALLMEMBERS
       ON ROWS
  FROM ( SELECT ( STRTOMEMBER(@FromDimDateHierarchy, CONSTRAINED) : STRTOMEMBER(@ToDimDateHierarchy, CONSTRAINED) )
               ON COLUMNS
          FROM [ArveCubeBiceps]
       )

我有另一个数据集(dataset2),它只包含那些登录用户应该能够查看的分区号(程序提供的数据)。我需要通过dataset2的值过滤dataset1可用值。

- 我不能只使用数据集2作为分区编号的可用值,因为报表查询是MDX,并且期望元组,数据集2不提供。当我尝试将dataset2值连接成元组时,我得到一个我不能使用的错误“&” for Object()type。

- 当我在报表上创建隐藏参数时,可用和默认值是来自dataset2的参数,然后将过滤器表达式应用于dataset1查询,其中显示“@ID在@hidden_​​parameter中的分区ID” - 我没有得到该分区的可用值参数(我查了表,所有数据都在那里)

我需要做些什么来使这个过滤器表达式正常工作...请帮助任何人:)

@mmarie 第二个数据集由存储过程创建:

USE [Biceps]  
GO  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
ALTER PROCEDURE [dbo].[ArveDivisionsByUserID]   
    @ldapuid nvarchar(30)  
AS  
BEGIN  
declare @hier as hierarchyid  
declare @managerID as int  

select @managerID = em.employeeID from Dim_Employee2 em where em.ldapuid = @ldapuid  

select @hier = dv.hier from Dim_Division dv where dv.managerID = @managerID and hier is   not null order by hier desc  

select divisionID from Dim_Division dv where hier.IsDescendantOf(@hier)=1 order by hier  

END

@FrankPI - offtopic 不知道为什么,但我使用ctrl + k代码,但它仍然是常规文本:(

2 个答案:

答案 0 :(得分:0)

如果结果集不是很大,那么简单的方法是使用数据集上的过滤器而不是MDX中的过滤器:

添加一个布尔过滤器,其中Expression为=True,Value值如下:

=iif(instr(join(Parameters!DataSet2Parameter.Value,","),
Fields!ToDimDateHierarchy.Value)=0,True, False)

答案 1 :(得分:0)

如果您可以更改第二个查询,那么可以使用e将允许的成员列表作为集合定义字符串而不是成员列表返回。 G。 SetToStr功能。然后,可以在第一个查询中将其用作[Dim Division].[Hierarchy].ALLMEMBERS替换行的文本StrToSet(@AllowedDivisionSet, CONSTRAINED)的参数。