0

我有抛出错误的 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]
                )
4

1 回答 1

0

您应该做的不是多次使用层次结构。但是从您的陈述来看,它是“动态添加的”,我假设它是由不同的模块完成的,并且单独的模块协调它们的层次过滤器是一个问题。在这种情况下 - 创建一个像这样的子查询:

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 删除过滤器 - 将其推送到子查询中是很有意义的。

于 2018-11-20T17:38:34.257 回答