2016-09-07 62 views
1

我一直在寻找这个整个计算器,我无法弄清楚。所以我有一个使用SSAS多维数据集的数据集,它有两个参数。它有一个类别和子类别。MDX SSRS参数类别选择所有子类别

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

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

我想要做的是获得该类别内的所有子类别的总数。我尝试使用默认值ALL,但没有奏效。我试图在表内的小组上进行总计测试,但这不起作用。
因此,对于组G1和子组SG1和SG2),以及子报告SR1,SR2,它是这样的

G1

-total(SG1 + SG2 + SG3)
--- SR1
--- SR2

-SG1
--- SR1
--- SR2


-S G2
--- 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 

因此,根据从类别中选择的内容,它将过滤子类别y仅限于该类别内的所有级别,以便级联。 任何资源或帮助将是伟大的。

+0

您必须首先填充类别参数,然后使用其值填充子类别参数。添加您用于填充子类别参数的MDX脚本示例。 –

+0

是的,我有两个数据集,一个是类别参数列表,然后第二个数据集具有相关类别的子类别,并且使用类别参数进行过滤,因此在选择级联参数时级联。这工作正常,只是我无法获得整个类别的总数,如果未使用子类别,我也无法将数据集中的子类别参数默认为类别内的所有子类别。 – Dungkin

+1

如果没有看到使用参数的MDX脚本,很难确定它为什么没有得到类别总数。此外,如果您希望在用户子类别参数为空时显示所有类别,则可以创建另一个内部/隐藏参数,以检查子类别是否为空,在此情况下将其设置为所有子类别。 –

回答

2

正如我在评论中所说的,您不能使用您的成员名称在MDX中切割您的立方体,您必须改用unique name。你必须处理它,所以当你的用户为ParamCategory参数选择Category XCategory 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 fieldCategory UniqueNameValue 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 

FilterInStr功能不requerid,因为要传递的唯一名称成员。

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

让我知道这是否有帮助。

+1

(提升)很好回答alejandro – whytheq