使用从数据透视表生成的 mdx 的问题
Issues using mdx generated from PivotTable
我最近使用 excel 连接到分析服务并生成用于查询多维数据集的 mdx 代码。代码如下所示。该代码还使用 sql 分析器进行了验证。但是,当我转到分析服务并浏览多维数据集并将多维数据集放入管理工作室时,出现错误。请让我知道代码是否可以修复。这段代码正是我的要求所需要的,所以如果有任何修改,请在多维数据集本身内替换它。
代码
SELECT NON EMPTY Hierarchize(DrilldownMember(CrossJoin({
[ColorsDim].[PrimeColor].[All], [ColorsDim].[PrimeColor].[PrimeColor].AllMember},
{([ColorsDim].[SecondColor].[All]) }), [ColorsDim].[PrimeColor].[PrimeColor].AllMember,
[ColorsDim].[SecondColor])) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON COLUMNS
,NON EMPTY Hierarchize({DrilldownMember({
[ColorsDim].[Color_id].[All] },,, INCLUDE_CALC_MEMBERS) }) DIMENSION PROPERTIES
PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON ROWS FROM [Model]
WHERE ([Measures].[Number of records in ColorDim]) CELL PROPERTIES VALUE
,FORMAT_STRING
,BACK_COLOR
,FORE_COLOR
,FONT_FLAGS
错误
Query Preparation failed.
Additional information
The query cannot be prepared: The query must have at least one axis. The first axis of the query should not have mulitple hierarchies, nor should it reference any dimension other than the measures dimension..
Parameter name: mdx (MDXQueryGenerator)
期望的输出
以下查询显示了所需的输出:
Select non empty
[ColorsDim].[PrimeColor].children *
[ColorsDim].[SecondColor].children
on 0
, non empty
[ColorsDim].[Color_id].children
on 1
from [model]
where [Measures].[Number of records in ColorDim];
查询中的度量是该特定维度的行数
你提供的错误消息在我看来像是 SSRS 错误消息。
如果您打开带有多维数据集连接的 SSMS,然后打开 mdx 查询,查询应该 运行 正常。
重新格式化查询以便我们可以更清楚地看到发生了什么:
SELECT
NON EMPTY
Hierarchize(
DrilldownMember(
CrossJoin(
{[ColorsDim].[PrimeColor].[All]
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember}
,{([ColorsDim].[SecondColor].[All]) }
)
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember
, [ColorsDim].[SecondColor]
)
) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON COLUMNS
,NON EMPTY
Hierarchize(
{
DrilldownMember(
{[ColorsDim].[Color_id].[All] }
,,, INCLUDE_CALC_MEMBERS
)
}
)
DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON ROWS
FROM [Model]
WHERE ([Measures].[Number of records in ColorDim])
CELL PROPERTIES VALUE
,FORMAT_STRING
,BACK_COLOR
,FORE_COLOR
,FONT_FLAGS
Excel 添加了很多样板代码,因此我们可以摆脱单元格和维度属性,我怀疑不需要层次化,交叉连接可以用简单的 *
运算符代替,给这个:
SELECT
NON EMPTY
DrilldownMember(
[ColorsDim].[PrimeColor].[All]
* [ColorsDim].[PrimeColor].[PrimeColor].AllMember
,{([ColorsDim].[SecondColor].[All])}
)
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember
, [ColorsDim].[SecondColor]
)
ON 0
,NON EMPTY
DrilldownMember(
{[ColorsDim].[Color_id].[All] }
,,, INCLUDE_CALC_MEMBERS
)
ON 1
FROM [Model]
WHERE [Measures].[Number of records in ColorDim];
如果您想在 SSRS 中使用它,那么您需要重新编写它,以便 COLUMNS(或 0)仅使用维度 Measures!
为了让 ssrs 足够开心,你可以这样做:
WITH
MEMBER [Measures].[Green_YellowGreen] AS
(
[ColorsDim].[PrimeColor].[PrimeColor].[Green],
[ColorsDim].[PrimeColor].[SecondColor].[Yellow-Green],
[Measures].[Number of records in ColorDim]
)
MEMBER [Measures].[Green_BlueGreen] AS
(
[ColorsDim].[PrimeColor].[PrimeColor].[Green],
[ColorsDim].[PrimeColor].[SecondColor].[Blue-Green],
[Measures].[Number of records in ColorDim]
)
SELECT
NON EMPTY
{[Measures].[Green_YellowGreen], [Measures].[Green_BlueGreen] }
ON 0
, NON EMPTY
[ColorsDim].[Color_id].children
ON 1
FROM [model];
我最近使用 excel 连接到分析服务并生成用于查询多维数据集的 mdx 代码。代码如下所示。该代码还使用 sql 分析器进行了验证。但是,当我转到分析服务并浏览多维数据集并将多维数据集放入管理工作室时,出现错误。请让我知道代码是否可以修复。这段代码正是我的要求所需要的,所以如果有任何修改,请在多维数据集本身内替换它。
代码
SELECT NON EMPTY Hierarchize(DrilldownMember(CrossJoin({
[ColorsDim].[PrimeColor].[All], [ColorsDim].[PrimeColor].[PrimeColor].AllMember},
{([ColorsDim].[SecondColor].[All]) }), [ColorsDim].[PrimeColor].[PrimeColor].AllMember,
[ColorsDim].[SecondColor])) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON COLUMNS
,NON EMPTY Hierarchize({DrilldownMember({
[ColorsDim].[Color_id].[All] },,, INCLUDE_CALC_MEMBERS) }) DIMENSION PROPERTIES
PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON ROWS FROM [Model]
WHERE ([Measures].[Number of records in ColorDim]) CELL PROPERTIES VALUE
,FORMAT_STRING
,BACK_COLOR
,FORE_COLOR
,FONT_FLAGS
错误
Query Preparation failed.
Additional information
The query cannot be prepared: The query must have at least one axis. The first axis of the query should not have mulitple hierarchies, nor should it reference any dimension other than the measures dimension..
Parameter name: mdx (MDXQueryGenerator)
期望的输出
以下查询显示了所需的输出:
Select non empty
[ColorsDim].[PrimeColor].children *
[ColorsDim].[SecondColor].children
on 0
, non empty
[ColorsDim].[Color_id].children
on 1
from [model]
where [Measures].[Number of records in ColorDim];
查询中的度量是该特定维度的行数
你提供的错误消息在我看来像是 SSRS 错误消息。
如果您打开带有多维数据集连接的 SSMS,然后打开 mdx 查询,查询应该 运行 正常。
重新格式化查询以便我们可以更清楚地看到发生了什么:
SELECT
NON EMPTY
Hierarchize(
DrilldownMember(
CrossJoin(
{[ColorsDim].[PrimeColor].[All]
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember}
,{([ColorsDim].[SecondColor].[All]) }
)
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember
, [ColorsDim].[SecondColor]
)
) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON COLUMNS
,NON EMPTY
Hierarchize(
{
DrilldownMember(
{[ColorsDim].[Color_id].[All] }
,,, INCLUDE_CALC_MEMBERS
)
}
)
DIMENSION PROPERTIES PARENT_UNIQUE_NAME
,HIERARCHY_UNIQUE_NAME ON ROWS
FROM [Model]
WHERE ([Measures].[Number of records in ColorDim])
CELL PROPERTIES VALUE
,FORMAT_STRING
,BACK_COLOR
,FORE_COLOR
,FONT_FLAGS
Excel 添加了很多样板代码,因此我们可以摆脱单元格和维度属性,我怀疑不需要层次化,交叉连接可以用简单的 *
运算符代替,给这个:
SELECT
NON EMPTY
DrilldownMember(
[ColorsDim].[PrimeColor].[All]
* [ColorsDim].[PrimeColor].[PrimeColor].AllMember
,{([ColorsDim].[SecondColor].[All])}
)
, [ColorsDim].[PrimeColor].[PrimeColor].AllMember
, [ColorsDim].[SecondColor]
)
ON 0
,NON EMPTY
DrilldownMember(
{[ColorsDim].[Color_id].[All] }
,,, INCLUDE_CALC_MEMBERS
)
ON 1
FROM [Model]
WHERE [Measures].[Number of records in ColorDim];
如果您想在 SSRS 中使用它,那么您需要重新编写它,以便 COLUMNS(或 0)仅使用维度 Measures!
为了让 ssrs 足够开心,你可以这样做:
WITH
MEMBER [Measures].[Green_YellowGreen] AS
(
[ColorsDim].[PrimeColor].[PrimeColor].[Green],
[ColorsDim].[PrimeColor].[SecondColor].[Yellow-Green],
[Measures].[Number of records in ColorDim]
)
MEMBER [Measures].[Green_BlueGreen] AS
(
[ColorsDim].[PrimeColor].[PrimeColor].[Green],
[ColorsDim].[PrimeColor].[SecondColor].[Blue-Green],
[Measures].[Number of records in ColorDim]
)
SELECT
NON EMPTY
{[Measures].[Green_YellowGreen], [Measures].[Green_BlueGreen] }
ON 0
, NON EMPTY
[ColorsDim].[Color_id].children
ON 1
FROM [model];