Этот простой MDX запрос работают в SSMS:SSRS отчет MDX: использование размер столбцов
SELECT
CrossJoin({[Measures].[Qnt]},
{[Sales_step].CHILDREN}) ON COLUMNS,
[City] ON ROWS
FROM [SALES_PIPE]
Но не запускается в Visual Studio для отчета RDL. Ошибка accures:
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)
Я нашел другой синтаксис для получения результатов, но это смещ_по_столбцы жестко закодированы и сценарий медленно:
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 dim только по строкам, - я получаю нулевые результаты по столбцам). Любые предложения, как я могу сделать мой mdx быстрее?
Из интереса: Вы когда-нибудь получить ответ на этот HTTP: //stackoverflow.com/questions/30568720/mdx-generate-hierarchy-level-within-rdl-report – whytheq
Приветствия 2whytheq! Ты прав. Мы должны быть очень осторожны при совместном использовании функций Filter() и Crossjoin(). Это часто делает mdx очень медленным. Как вы любезно предложили, я заменил блок Filter() на запрос subcube - и он заставил код работать намного быстрее. Затем я заменил CASE на IIF, и все получилось лучше. Я отправлю новый код в качестве ответа – Globe