MDX SSRS Parameter category 选择所有子类别

MDX SSRS Parameter category chooses all sub category

我一直在 Whosebug 上寻找这个,但我无法弄清楚。所以我有一个使用 SSAS 多维数据集的数据集,它有两个参数。它有一个类别和子类别。

我已经创建了数据集来填充这些参数,当我 select 它们都工作时它们工作正常。

我的报表运行的方式是它是 table 中子报表的集合,它按类别分组,并按子类别进行子分组。所以当我 select 类别参数时,它会列出所有子报告的每个子类别。

我想要做的是获取该类别中所有子类别的总和。我尝试对 ALL 使用默认值,但没有用。我尝试对 table 中的组进行总计,但这不起作用。
所以对于 G1 组和子组 SG1 和 SG2),子报告 SR1,SR2,它是这样的

G1

-总计 (SG1+SG2+SG3)
---SR1
---SR2

-SG1
---SR1
---SR2


-SG2
---SR1
---SR2

通过将子报告中的类别参数设置为为类别传入的参数,并将子类别参数设置为子组的值,我能够完成子组报告部分。但我需要那该死的总数。

我的类别的 MDX 是

SELECT { } ON COLUMNS, { ([Service].[Category].[Category].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Sales-Cube] CELL PROPERTIES VALUE

子类别的 MDX 是

 SELECT { } ON COLUMNS, { ([Service].[Category].[Category].ALLMEMBERS * [Service].[SubCategory].[Subcategory].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Sales-Cube] CELL PROPERTIES VALUE

我正在使用参数的数据集的 MDX 是使用设计器创建的,如下所示

SELECT NON EMPTY { [Measures].[Sales Count] } ON COLUMNS, 
NON EMPTY { ([Date].[Fiscal Year].[Fiscal Year].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM ( SELECT ( Filter( [Service].[SubCategory].[SubCategory].ALLMEMBERS, Instr( [Service].[SubCategory].currentmember.Properties( 'Member_Caption' ), @ParamSubCategory )  > 0  ) ) ON COLUMNS 
FROM ( SELECT ( Filter( [Service].[Category].[Category].ALLMEMBERS, Instr( [Service].[Category].currentmember.Properties( 'Member_Caption' ), @ParamCategory )  > 0  ) ) ON COLUMNS 
FROM [Sales-Cube])) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

因此,根据从类别中 select 编辑的内容,它会将子类别过滤为仅属于该类别的子类别,以便进行级联。 任何资源或帮助都会很棒。

正如我在评论中所说,您不能使用成员的姓名在 MDX 中对多维数据集进行切片,您必须改用 unique name。您必须处理它,以便当您的用户为您的 ParamCategory 参数选择 Category XCategory Y 时,它应该设置为 [Service].[Category].&[Category X][Service].[Category].&[Category Y]。这就是我要做的。

我会使用 MDX 脚本 returns 标签(名称)和填充类别的唯一名称。

WITH MEMBER [Measures].[Category Label] AS
  [Service].[Category].CurrentMember.Name
MEMBER [Measures].[Category UniqueName] AS
  [Service].[Category].CurrentMember.UniqueName
SELECT
{ [Measures].[Category Label], [Measures].[Category UniqueName] } ON COLUMNS,
{} ON ROWS
FROM [Sales-Cube]

在参数属性/可用值中,您必须为 Label field 使用 Category Label 字段,为 Value field 使用 Category UniqueName 字段。

同样的方法来填充 ParamSubcategory

WITH MEMBER [Measures].[SubCategory Label] AS
  [Service].[SubCategory].CurrentMember.Name
MEMBER [Measures].[SubCategory UniqueName] AS
  [Service].[SubCategory].CurrentMember.UniqueName
SELECT
{ [Measures].[SubCategory Label], [Measures].[SubCategory UniqueName] } ON COLUMNS,
{ [Service].[SubCategory].[SubCategory] } ON ROWS
FROM [Sales-Cube]
WHERE ( StrToSet ( @ParamCategory ) )

请注意,我使用 ParamCategory 来填充 ParamSubcategory 仅包含相关的子类别。

现在您可以在 MDX 脚本中使用这些参数:

SELECT NON EMPTY { [Measures].[Sales Count] } ON COLUMNS,
NON EMPTY
{
  ( [Date].[Fiscal Year].[Fiscal Year].AllMembers )
} Dimension Properties MEMBER_CAPTION,
MEMBER_UNIQUE_NAME ON ROWS
FROM (
  SELECT ( STRTOSET( @ParamSubcategory ) ) ON COLUMNS
  FROM (
    SELECT ( STRTOSET ( @ParamCategory ) ) ON COLUMNS
    FROM [Sales-Cube]
  )
) CELL Properties Value,
BACK_COLOR,
FORE_COLOR,
FORMATTED_VALUE,
FORMAT_STRING,
FONT_NAME,
FONT_SIZE,
FONT_FLAGS

注意 FilterInStr 函数不需要,因为您传递的是唯一名称成员。

它没有经过测试,但应该可以,祝你好运!

如果有帮助请告诉我。