【发布时间】: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])。将此添加为答案。