【问题标题】:Flattening an MDX-query for acceptance in Query-designer扁平化 MDX 查询以在 Query-designer 中接受
【发布时间】:2014-03-01 18:35:07
【问题描述】:

以下查询在 SSMS 中完美运行,但由于我在 COLUMNS 轴上定义了一个维度,它在 Query-designer 中不起作用:

SELECT 
    NON EMPTY { 
        [Measures].[Amount]
        * [Cost Type].[Cost Type].[Cost Type]
    } ON COLUMNS
    , NON EMPTY { 
        [Empl].[Name].[Name]
        * [Date].[Calendar].[Month]
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM 
    Cube

为了解决这个问题,我按以下方式展平了查询:

SELECT t.* 
FROM (

    SELECT 
        NON EMPTY { 
            [Measures].[Amount]
            * [Cost Type].[Cost Type].[Cost Type]
        } ON COLUMNS
        , NON EMPTY { 
            [Empl].[Name].[Name]
            * [Date].[Calendar].[Month]
        } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
    FROM 
        Cube

) AS t

这在 SSMS 中效果很好,就像第一个查询一样。但是,这会在 Query-designer 中导致以下错误:

TITLE: Microsoft Visual Studio
------------------------------

Query preparation failed.

------------------------------
ADDITIONAL INFORMATION:

Please verify that the query is an MDX one and not DMX. (Microsoft.AnalysisServices.Controls)

------------------------------
BUTTONS:

OK
------------------------------

这是我正在寻找的结果:

Name     Month     Cost_Type1     Cost_Type2     Cost_Type3
a        january   1.54           1.56           2.43
a        january   3.53           2.34           1.23
b        january   3.53           2.13           4.53

如何让这个查询在查询设计器(来自 BIDS、Visual Studio)中工作?

【问题讨论】:

  • 您是否尝试过使用查询设计器的设计器模式(拖放)来构造此查询?然后就可以切换到MDX模式查看设计器生成的MDX了。
  • 我无法在设计器模式下构造查询,因为它不允许我将度量与维度结合起来。
  • 只是为了确保我正确理解您:您的扁平化数据集应该简单地显示所有员工、所有月份和所有成本类型的金额。正确的?所以在设计器模式下,为什么不直接从 [Empl] 维度拖入 [Name]- 属性,从 [Date] 维度的 [Calendar] 属性拖入 [Month] 级别,然后将 [ Cost Type]-[Cost Type]-维度的属性,最后是 [Amount] 度量。瞧!
  • 这将导致每个成本类型的记录,而不是我尝试选择具有所有成本类型的记录(如我刚刚添加的示例所示)。
  • 啊,我明白了。不幸的是,在 Query-designer 中,除了为每个成本类型创建计算成员,然后将它们一一添加到 SELECT 语句之外,别无选择。每个计算成员将只是一个简单的元组:([Cost Type].[Cost Type].&[1], [Measures].[Amount])。将此添加为答案。

标签: ssas ssms mdx


【解决方案1】:

由于您希望 [Measures].[Amount] 度量在每个 [Cost Type] 的列上重复,您别无选择,只能为每个成本类型创建计算成员:

WITH 
MEMBER [Cost_Type1] AS ([Cost Type].[Cost Type].[Cost_Type1], [Measures].[Amount])
MEMBER [Cost_Type2] AS ([Cost Type].[Cost Type].[Cost_Type2], [Measures].[Amount])
MEMBER [Cost_Type3] AS ([Cost Type].[Cost Type].[Cost_Type3], [Measures].[Amount])

SELECT { [Cost_Type1], [Cost_Type2], [Cost_Type3] } ON COLUMNS,
    NON EMPTY { 
        [Empl].[Name].[Name]
        * [Date].[Calendar].[Month]
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM 
    Cube

这是由于 BIDS 查询设计器的限制 - 它不允许在“设计时”有未知数量的列,因此无法在 COLUMNS 轴上指定一个集合 - 只有单个成员(即使它在 SSMS 中运行良好)。

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多