MDX根据用户定义的值计算列

时间:2017-01-12 00:05:44

标签: ssas mdx excel-2013 cube

我正在尝试生成一个Excel数据透视表,它根据用户指定的值显示和比较销售代表收入数据,例如InvoiceYear。

此数据来自SSAS多维数据集,我已使用PowerPivot连接到它。我在数据模型中有多维数据集中的列,我正在尝试在“表属性”窗口中编辑MDX代码以创建一些新列。

到目前为止,这可以使用,但InvoiceYear值被硬编码为' 2010'在这一刻。我需要一种方法让这段代码接受用户在excel工作表中输入单元格的值。

我只是一个初学者,所以我不知道这是否可能。

如果这种方法不可行,我真的需要找到另一种方法来做到这一点。从另一侧来到它并在单元格通过宏或vba更改时刷新列?其他一些解决方案?

以下是“编辑表属性”窗口中的内容。这样可以正常工作,但我不能像这样硬编码Year值,否则用户将无法指定自定义Year值。我已经尝试了一些我能想到的引用工作表中的单元格,但该列通常只显示为空,没有错误。

WITH MEMBER RentalSales AS
    CASE when [SalesRep_Dim].[InvoiceYear].currentmember.membervalue = '2010' then [Measures].[LineAmountMST] else 0 end

SELECT NON EMPTY { Measures.RentalSales, [Measures].[LineAmountMST] } ON COLUMNS,  
NON EMPTY { ([SalesRep_Dim].[InvoiceMonth].[InvoiceMonth].ALLMEMBERS * [SalesRep_Dim].[InvoiceYear].[InvoiceYear].ALLMEMBERS * [SalesRep_Dim].[SaleRep].[SaleRep].ALLMEMBERS * [SalesRep_Dim].[ItemGroup].[ItemGroup].ALLMEMBERS * [SalesRep_Dim].[Site].[Site].ALLMEMBERS * [SalesRep_Dim].[Source].[Source].ALLMEMBERS * [SalesRep_Dim].[Type].[Type].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM ( SELECT ( -{ [SalesRep_Dim].[InvoiceMonth].&[]&[0], [SalesRep_Dim].[InvoiceMonth].[All].UNKNOWNMEMBER } ) ON COLUMNS FROM [GMFSalesTransRepRevenue]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

3 个答案:

答案 0 :(得分:0)

我不相信你现有的做法是可能的。但是,如果您切换到使用Power Query从SSAS获取数据并加载到Power Pivot,则应该可以。

Power Query可以按照here所述查询SSAS。用户输入的Excel工作簿中的read a cell,并在Power Query中过滤来自SSAS的数据。

答案 1 :(得分:0)

您应该查看切片器,它们在视觉上更具吸引力,您可以使用它们通过一个选择过滤多个数据透视表。

设置报告过滤器并将切片器设置为相同的属性,您可以使用Cell作为公式参考,并使用切片器进行用户输入。

这应该像选择数据透视表一样简单,转到插入Excel工具栏,在过滤器下显示"切片器"。

选择您要过滤的属性,并完成切片器。

答案 2 :(得分:0)

可以选择创建回写指标。您可以将其值转换为在数据透视表中发生的计算成员。然而,这不是最佳做法。我建议避免这种方法。

步骤:

  1. 创建一个视图(例如,一列int)。
  2. 从此视图中创建一个度量值组。
  3. 添加具有回写设置的分区,请参阅:http://bidn.com/blogs/DevinKnight/ssis/1768/ssas-creating-and-using-a-writeback-measure-group
  4. 创建计算度量,例如:
  5.   

    (StrToMember('[SalesRep_Dim]。[InvoiceYear]。& ['+ Cstr([Measures]。[WriteBackMeasure])+']'),[Measures]。[LineAmountMST])

    其中[Measures]。[WriteBackMeasure]是你的回写指标,如果[Measures]。[WriteBackMeasure] = 2010那么你将获得以下内容:

      

    ([SalesRep_Dim]。[InvoiceYear]。& [2010],[Measures]。[LineAmountMST])

    1. 打开两个数据透视表:一个只有[Measures]。[WriteBackMeasure],另一个是带有计算成员的报告。