我有一个关于多维数据集的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代码,但它仍然是常规文本:(
答案 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)
的参数。