【发布时间】:2015-06-22 08:49:04
【问题描述】:
这个简单的 mdx 查询可以在 SSMS 中工作:
SELECT
CrossJoin({[Measures].[Qnt]},
{[Sales_step].CHILDREN}) ON COLUMNS,
[City] ON ROWS
FROM [SALES_PIPE]
但它无法在 Visual Studio 中运行 rdl 报告。出现错误:
The query cannot be prepared: The query must have at least one axis.
The first axis of the query should not have multiple hierarchies,
nor should it reference any dimension other than the Measures dimension..
Parameter name: mdx (MDXQueryGenerator)
我找到了另一种检索结果的语法,但它的 cols 是硬编码的并且脚本很慢:
WITH
MEMBER [Measures].[Contacts] AS
CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[contact]
THEN [Measures].[Qnt] ELSE null END
MEMBER [Measures].[Clients] AS
CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[client]
THEN [Measures].[Qnt] ELSE null END
MEMBER [Measures].[Funded] AS
CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[funded]
THEN [Measures].[Qnt] ELSE null END
SELECT {[Measures].[Contacts],
[Measures].[Clients],
[Measures].[Funded]} ON COLUMNS,
NON EMPTY
FILTER(crossjoin({[City].CHILDREN},
{[Sales_step].CHILDREN}),
[Measures].[Contacts] > 0 OR
[Measures].[Clients] > 0 OR
[Measures].[Funded] > 0) ON ROWS
FROM [SALES_PIPE]
这使它变得非常慢的部分 - 不是计算成员,它是行上 City 和 Sales_step 维度的交叉连接,我必须这样做(否则,City 仅在行上变暗, - 我在列上得到空结果)。有什么建议可以让我的 mdx 更快吗?
【问题讨论】:
-
出于兴趣:你有没有得到这个答案?stackoverflow.com/questions/30568720/…
-
干杯 2whytheq!你说的对。一起使用 Filter() 和 Crossjoin() 函数时,我们应该非常小心。它通常使 mdx 非常慢。正如您所提议的那样,我已经用 subcube 请求替换了 Filter() 块 - 它使代码运行得更快。然后我用 IIF 替换了 CASE,效果也更好。我将发布一个新代码作为答案
标签: reporting-services mdx olap dimension rdl