Reporting services SSAS(MDX)-基于另一个数据集筛选数据集

Reporting services SSAS(MDX)-基于另一个数据集筛选数据集,reporting-services,dataset,report,ssas,mdx,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].[

我有一个多维数据集的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]
       )
=iif(instr(join(Parameters!DataSet2Parameter.Value,","),
Fields!ToDimDateHierarchy.Value)=0,True, False)
我还有另一个数据集dataset2,它只包含那些部门编号,登录的用户应该能够查看由过程提供的数据。我需要用dataset2的值过滤dataset1的可用值

-我不能仅仅使用dataset2作为division number的可用值,因为报表查询是MDX,并且需要元组,而dataset2不提供元组。当我试图将dataset2值连接到元组中时,我得到了一个无法使用的错误&对于对象类型

-当我在报表上创建一个隐藏参数时,可用值和默认值都是来自dataset2的值,然后在dataset1查询中应用一个过滤表达式,在@hidden_parameter中显示DivisionID-我没有为Division参数获取可用值,我检查了表,所有数据都在那里

要使此筛选器表达式正常工作,我必须做什么。。。请帮助任何人:

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

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
@弗兰克比-离题
不知道为什么,但我使用ctrl+k作为代码,但它仍然是常规文本:

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

添加一个布尔过滤器,其中表达式为=True,值如下所示:

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]
       )
=iif(instr(join(Parameters!DataSet2Parameter.Value,","),
Fields!ToDimDateHierarchy.Value)=0,True, False)

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

您能发布第二个数据集的内容吗?@mmarie-将您要求的代码添加到main中post@ArturChmielewski要格式化代码块,请不要将其包含在反勾号中,但要将它们缩进至少四个空格。在backticks中包含是为了在文本代码中包含。嗨,Frank,我使用了你的想法,其值如下:=iifinstrjoinParameters!DivisionByUser.Value,CStrFields!Division_ID.Value>0,True,False,但可用值列表为空,我只有在可用值下拉列表中可见的SelectAll复选框,并且对于我的testcase,我应该有两个可用的分区可供选择。我已经用硬编码值而不是字段检查了instr部件!Division_ID.Value,并按预期返回整数。当值未硬编码且字段已传递时,就会出现问题。为了获得帮助,我让过程使用代码行返回类似元组的值:从Dim_Division dv where hier中选择concat'[Dim Division].[Hierarchy].[Division ID].&[',castdivisionID为nvar3',]'作为divisionstr。IsDescendantOf@hier=1个订单(按订单)