#reporting-services #mdx
#службы отчетов #многомерные выражения
Вопрос:
При использовании MDX studio мой код выполняется нормально, как только я использую тот же код в SSRS, я получаю сообщение об ошибке «запрос не может быть подготовлен: запрос должен иметь хотя бы одну ось
Я пробовал переключать строки и столбцы и видел похожие проблемы, но не смог воспроизвести желаемый результат с помощью этих решений
WITH
MEMBER [Version].[Version].[Product Long Desc] AS
iif([Product].[Product].CurrentMember.Level.Ordinal=1, "TOTAL",[Product].[Product].CurrentMember.Member_Caption)
MEMBER [Measures].[Trans] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[Customers],[Measures].[Transactions])
MEMBER [Measures].[ACP] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[ACP Customers],[Measures].[ACP Transactions])
MEMBER [Measures].[AIC] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[AIC Customers],[Measures].[AIC Transactions]) MEMBER [Version].[Version].[Measure Name]
AS CASE [Measures].CurrentMember.Member_Caption WHEN "Sales Units"
THEN "UNITS" WHEN "Customers" THEN "TRANS." WHEN "Transactions" THEN "TRANS."
WHEN "ACP Customers" THEN "ACP" WHEN "AIC Customers" THEN "AIC" WHEN "Reg Sales Avg Retail Selling Price"
THEN "AIP" ELSE [Measures].CurrentMember.Member_Caption END
MEMBER [Version].[Version].[Comparable LY Perc] AS
([Version].[Version].[Version No].[ACT % ON LY],[Like for Like].[Like for Like].[Like for Like Adj Ind].amp;[1])
MEMBER [Version].[Version].[Actual YTD] AS
([Version].[Version].[Version No].amp;[1],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[LY YTD] AS
([Version].[Version].[Version No].amp;[5],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[Comparable LY Perc YTD] AS
([Version].[Version].[Version No].[ACT % ON LY],[Like for Like].[Like for Like].[Like for Like Adj Ind].amp;[1],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[LY Perc YTD] AS
([Version].[Version].[Version No].[ACT % ON LY],[Accumulation].[Accumulation].[YTD])
MEMBER [Product].[Product].[TOTAL Camp;GM] AS
Aggregate({[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7]})
MEMBER [Product].[Product].[TOTAL Camp;GM (Incl CRG)] AS
Aggregate({[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7],[Product].[Product].[Business Unit No].amp;[8]})
SELECT {[Version].[Version].[Product Long Desc],[Version].[Version].[Measure Name],[Version].[Version].[Version No].amp;[1],[Version].[Version].[Version No].amp;[5],[Version].[Version].[Comparable LY Perc],[Version].[Version].[Version No].[ACT % ON LY],[Version].[Version].[Actual YTD],[Version].[Version].[LY YTD],
[Version].[Version].[Comparable LY Perc YTD],[Version].[Version].[LY Perc YTD]} ON COLUMNS,({[Product].[Product].[Company No].amp;[2],[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7],[Product].[Product].[TOTAL Camp;GM],
[Product].[Product].[Business Unit No].amp;[8],[Product].[Product].[TOTAL Camp;GM (Incl CRG)],[Product].[Product].[Business Unit No].amp;[3]},{[Measures].[Sales],[Measures].[Sales Units],[Measures].[Trans],[Measures].[ACP],[Measures].[AIC],[Measures].[Reg Sales Avg Retail Selling Price]})
ON ROWS FROM [WW Performance Business View]WHERE ([Location].[Location].[Chain No].amp;[243],tail(Filter([Time].[Time].[Fin Week],[Time].[Time].Properties( "Compl Wk Ind" )="1"),1).item(0))
чтобы код выполнялся в Visual Studio так, как он выполняется в MDX studio, если это возможно
Комментарии:
1. Можете ли вы опубликовать вывод запроса из MDX studio?
Ответ №1:
Приятно MDX
!! Довольно большой скрипт. Я начал немного изменять формат, чтобы посмотреть, что происходит:
WITH
MEMBER [Version].[Version].[Product Long Desc] AS
iif(
[Product].[Product].CurrentMember.Level.Ordinal=1, "TOTAL",[Product].
[Product].CurrentMember.Member_Caption)
MEMBER [Measures].[Trans] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[Customers],[Measures].[Transactions])
MEMBER [Measures].[ACP] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[ACP Customers],[Measures].[ACP Transactions])
MEMBER [Measures].[AIC] AS iif([Product].[Product].CurrentMember.Level.Ordinal=1,
[Measures].[AIC Customers],[Measures].[AIC Transactions]) MEMBER [Version].[Version].[Measure Name]
AS CASE [Measures].CurrentMember.Member_Caption WHEN "Sales Units"
THEN "UNITS" WHEN "Customers" THEN "TRANS." WHEN "Transactions" THEN "TRANS."
WHEN "ACP Customers" THEN "ACP" WHEN "AIC Customers" THEN "AIC" WHEN "Reg Sales Avg Retail Selling Price"
THEN "AIP" ELSE [Measures].CurrentMember.Member_Caption END
MEMBER [Version].[Version].[Comparable LY Perc] AS
([Version].[Version].[Version No].[ACT % ON LY],[Like for Like].[Like for Like].[Like for Like Adj Ind].amp;[1])
MEMBER [Version].[Version].[Actual YTD] AS
([Version].[Version].[Version No].amp;[1],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[LY YTD] AS
([Version].[Version].[Version No].amp;[5],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[Comparable LY Perc YTD] AS
([Version].[Version].[Version No].[ACT % ON LY],[Like for Like].[Like for Like].[Like for Like Adj Ind].amp;[1],[Accumulation].[Accumulation].[YTD])
MEMBER [Version].[Version].[LY Perc YTD] AS
([Version].[Version].[Version No].[ACT % ON LY],[Accumulation].[Accumulation].[YTD])
MEMBER [Product].[Product].[TOTAL Camp;GM] AS
Aggregate({[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7]})
MEMBER [Product].[Product].[TOTAL Camp;GM (Incl CRG)] AS
Aggregate({[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7],[Product].[Product].[Business Unit No].amp;[8]})
SELECT
{
[Version].[Version].[Product Long Desc]
,[Version].[Version].[Measure Name]
,[Version].[Version].[Version No].amp;[1]
,[Version].[Version].[Version No].amp;[5]
,[Version].[Version].[Comparable LY Perc]
,[Version].[Version].[Version No].[ACT % ON LY]
,[Version].[Version].[Actual YTD]
,[Version].[Version].[LY YTD]
,[Version].[Version].[Comparable LY Perc YTD],[Version].[Version].[LY Perc YTD]}
ON COLUMNS
,({[Product].[Product].[Company No].amp;[2],[Product].[Product].[Business Unit No].amp;[4],[Product].[Product].[Business Unit No].amp;[5],[Product].[Product].[Business Unit No].amp;[6],[Product].[Product].[Business Unit No].amp;[7],[Product].[Product].[TOTAL Camp;GM],
[Product].[Product].[Business Unit No].amp;[8],[Product].[Product].[TOTAL Camp;GM (Incl CRG)],[Product].[Product].[Business Unit No].amp;[3]},{[Measures].[Sales],[Measures].[Sales Units],[Measures].[Trans],[Measures].[ACP],[Measures].[AIC],[Measures].[Reg Sales Avg Retail Selling Price]})
ON ROWS
FROM [WW Performance Business View]
WHERE ([Location].[Location].[Chain No].amp;[243],tail(Filter([Time].[Time].[Fin Week],[Time].[Time].Properties( "Compl Wk Ind" )="1"),1).item(0));
…. затем я понял проблему: в SSRS
вам разрешено размещать [measures]
только в столбцах. Это ограничение SSRS
при использовании MDX
, поэтому вам нужно будет переписать скрипт… извините, это не приятный ответ, а просто ограничение инструмента.
Вот ссылка, подтверждающая некоторые ограничения: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/0d2b3e04-0fae-418b-a7ed-01c26147b839/mdx-works-fine-in-ssms-but-not-in-query-designer?forum=sqlreportingservices
p.s. MDX Studio
потрясающе! Я бы хотел, чтобы MS приняла его и развивала дальше.
Комментарии:
1. Большое спасибо за отзыв. Я понял это
Ответ №2:
Причина, по которой я боролся с этой проблемой, заключалась в том, что MDX studio не позволяет создавать более двух осей и генерирует ошибку, в то время как когда у меня есть две оси, и это работает в MDX studio, SSRS жалуется на измерения в столбце, поэтому вместо перезаписи моего многомерного выражения я разработал 3-ю ось в SSRS, использовал матрицу для отключения моего столбца, который будет размещен по строкам. Это быстрое надежное решение. Однако, пожалуйста, обратите внимание, что, следуя этому подходу, пришлось бы разрабатывать в SSRS, а не в MDX studio. Спасибо за помощь, ребята