【问题标题】:MDX SSRS Parameter category chooses all sub categoryMDX SSRS 参数类别选择所有子类别
【发布时间】:2016-09-07 13:55:10
【问题描述】:

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

我已经创建了数据集来填充这些参数,当我同时选择它们时它们可以正常工作。

我的报表运行方式是它是表格中子报表的集合,它按类别分组,并按子类别分组。因此,当我选择类别参数时,它会列出所有子报告的每个子类别。

我要做的是获取该类别中所有子类别的总数。我尝试对 ALL 使用默认值,但不起作用。我尝试对表中的组进行总计,但这不起作用。
所以对于 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

因此,根据从类别中选择的内容,它会将子类别过滤到仅类别中的子类别,因此它会级联。 任何资源或帮助都会很棒。

【问题讨论】:

  • 您必须先填充类别参数,然后使用其值填充子类别参数。添加您用于填充子类别参数的 MDX 脚本示例。
  • 是的,我有两个数据集,一个是类别参数列表,然后第二个数据集具有关联类别的子类别,并使用类别参数进行过滤,因此在选择时会级联。这很好用,只是我无法获得整个类别的总数,如果不使用子类别,我也无法将数据集中的子类别参数默认为类别中的所有子类别。
  • 如果没有看到使用参数的 MDX 脚本,很难确定为什么它没有获得类别总数。此外,如果您想在用户子类别参数为空时显示所有类别,您可以创建另一个参数作为内部/隐藏,检查子类别是否为空,在这种情况下将其设置为所有子类别。
  • 我为我的类别和子类别添加了 MDX 脚本。感谢您观看此亚历杭德罗
  • 你在哪里使用这些参数?请注意,您的参数正在填充维度成员值,即Bikes,但必须使用有效的合格成员填充,即[Service].[Category].&[Bikes]。

标签: reporting-services ssas mdx ssrs-2012


【解决方案1】:

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

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

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]

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

填充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

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

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

如果这有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多