Hirereachy используется более одного раза в функции перекрестного соединения
У меня запрос MDX, который выдает ошибку - "Иерархия portalID используется более одного раза в функции перекрестного соединения"
Запрос не выполняется в предложении where
WHERE
(-{[SG Location].[PortalID].[30],
[SG Location].[PortalID].[46]},
[SG Location].[PortalID].[4],
[SG Program].[Campaign].&[*Cymbalta_Lilly (111)],
[Prints],
[SG Location].[IsTest].[0]
)
В приведенном выше пункте where динамически добавляется следующее условие (Исключить несколько порталов).
-{[SG Location].[PortalID].[30],
[SG Location].[PortalID].[46]}
Пожалуйста помоги! Я новичок в запросах MDX. Любая полезная ссылка, относящаяся к запросам MDX - особенно о предложении where - действительно приветствуется.
Ниже приведен полный запрос MDX
WITH
MEMBER [SG Date].[Day].[TotPrintCount] AS
SUM(
{
[SG Date].[Day].&[2018-06-15],
[SG Date].[Day].&[2018-06-16],
[SG Date].[Day].&[2018-06-17],
[SG Date].[Day].&[2018-06-18]
},
[Measures].[Prints]
)
MEMBER [SG Date].[Day].[TotCustRev] AS
SUM(
{
[SG Date].[Day].&[2018-06-15],
[SG Date].[Day].&[2018-06-16],
[SG Date].[Day].&[2018-06-17],
[SG Date].[Day].&[2018-06-18]
},
[Measures].[CustRev]
)
MEMBER [SG Date].[Day].[TotLDMRev] AS
SUM(
{
[SG Date].[Day].&[2018-06-15],
[SG Date].[Day].&[2018-06-16],
[SG Date].[Day].&[2018-06-17],
[SG Date].[Day].&[2018-06-18]
},
[Measures].[LDMRev]
)
MEMBER [Measures].[RevRatio] AS [Measures].[LDMRev] / [Measures].[Transactions] * 1000
MEMBER [Measures].[MatchRatio] AS SUM([Measures].[PaidPrints]) / SUM([Measures].[Transactions]) * 100
SELECT {
[SG Date].[Day].[TotPrintCount],
[SG Date].[Day].&[2018-06-15],
[SG Date].[Day].&[2018-06-16],
[SG Date].[Day].&[2018-06-17],
[SG Date].[Day].&[2018-06-18],
[SG Date].[Day].[TotCustRev],
[SG Date].[Day].[TotLDMRev]}
ON COLUMNS, NON EMPTY
{
{ [SG Location].[Hierarchy].[Portal].ALLMEMBERS } * { [SG Program].[Hierarchy].ALLMEMBERS }
} ON ROWS FROM [ScriptGuide]
WHERE
(-{[SG Location].[PortalID].[30],
[SG Location].[PortalID].[46]},
[SG Location].[PortalID].[4],
[SG Program].[Campaign].&[*Cymbalta_Lilly (111)],
[Prints],
[SG Location].[IsTest].[0]
)
1 ответ
То, что вы ДОЛЖНЫ сделать, - это не использовать иерархию более одного раза. Но из вашего заявления, что это "добавлено динамически", я предполагаю, что это делается другим модулем, и для отдельных модулей является проблемой согласовать их фильтры иерархии. В этом случае - создайте подзапрос примерно так:
WITH
(...)
SELECT
(...)
FROM (
SELECT (-{[SG Location].[PortalID].[30], [SG Location].[PortalID].[46]}) on 0 FROM [ScriptGuide]
)
WHERE
(
[SG Location].[PortalID].[4],
[SG Program].[Campaign].&[*Cymbalta_Lilly (111)],
[Prints],
[SG Location].[IsTest].[0]
)
То, что мы делаем здесь, это отправка исключений PortalID по умолчанию в подзапрос в FROM. Этот запрос выполняется первым, и поэтому основной запрос не видит его как конфликтующий.
Если это глобальный (или, по крайней мере, глобальный) фильтр удаления PortalID - имеет смысл перенести его в подзапрос.