【问题标题】:SSAS (MDX) - Filtering Dataset based on another DatasetSSAS (MDX) - 基于另一个数据集过滤数据集
【发布时间】:2013-09-13 21:40:45
【问题描述】:

我有一个多维数据集的 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 的可用值。

-我不能只使用 dataset2 作为分区编号的可用值,因为报表查询是 MDX,并且需要元组,而 dataset2 不提供。当我尝试将 dataset2 值连接到元组中时,我收到一个错误,我不能将“&”用于 Object() 类型。

-当我在报表上创建一个隐藏参数时,可用的默认值是来自 dataset2 的参数,然后将过滤器表达式应用于 dataset1 查询,上面写着“@hidden_​​parameter 中的 DivisionID”-我没有得到 Division 的可用值参数(我检查了表格,所有数据都在那里)

我必须做些什么才能让这个过滤器表达式工作......请帮助任何人:)

@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 - 题外话 不知道为什么,我用了 ctrl+k 的代码,但它仍然是常规文本:(

【问题讨论】:

  • 你能发布第二个数据集的内容吗?
  • @mmarie - 将您要求的代码添加到主帖
  • @ArturChmielewski 要格式化代码块,请不要将它们包含在反引号中,但至少缩进四个空格。在反引号中包含用于文本代码。

标签: reporting-services dataset report ssas mdx


【解决方案1】:

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

【讨论】:

  • 非常感谢您的帮助,我使用以下代码行使程序返回类似元组的值:select concat( '[Dim Division].[Hierarchy].[Division ID].&[', cast(divisionID as nvarchar(3)), ']') as divisionstr from Dim_Division dv where hier.IsDescendantOf(@hier)=1 order by hier
【解决方案2】:

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

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

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

【讨论】:

  • 嗨弗兰克,我使用了你的想法,值如下:=iif(instr(join(Parameters!DivisionByUser.Value), CStr(Fields!Division_ID.Value))>0, True, False),但可用值列表为空(我只有在可用值下拉列表中可见“全选”复选框,并且对于我的测试用例,我应该有 2 个部门可供选择)。我用硬编码值而不是Fields!Division_ID.Value 检查了instr 部分,它按预期返回整数。当值没有硬编码并且字段被传递时,就会出现问题。
猜你喜欢
  • 2020-03-25
  • 2019-06-12
  • 2018-06-07
  • 2011-11-20
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多