2016-08-30 3 views
0

매개 변수가있는 T-SQL의 저장 프로 시저를 만들었습니다. MDX에서이 매개 변수를 사용하여 OLAP 큐브가 지역화되어 있고 'WHERE'조건에서 파일 경로를 정의하는 방법은 무엇입니까? 다음은 내 쿼리입니다.MDX에서 사용하는 매개 변수가있는 T-SQL 저장 프로 시저

CREATE PROCEDURE [dbo].[PaymentMethod] 
(
    @AccountID BIGINT, 
    @LocationID BIGINT 
) 
AS 
BEGIN  
SELECT N'Names' = CONVERT(VARCHAR(100), "[Basic].[Payment Method].[Payment Method].[MEMBER_CAPTION]"), 
     N'Revenue'= CONVERT(NUMERIC(18,2),CAST("[Measures].[Revenue]" AS FLOAT)) FROM OPENQUERY([LG], 
     'WITH MEMBER [Measures].[DateFilter] AS ''CDATE([Date.H_Date].CURRENTMEMBER.MEMBERVALUE)'', SOLVE_ORDER = 0, SCOPE_ISOLATION = CUBE MEMBER [Basic].[Payment Method].[All].[ChequePayment] AS ''[Basic].[Payment Method].[Amex] + [Basic].[Payment Method].[Master] + [Basic].[Payment Method].[Visa]'', SOLVE_ORDER = 0, SCOPE_ISOLATION = CUBE 

    SELECT {[Measures].[Revenue]} DIMENSION PROPERTIES [MEMBER_CAPTION] ON COLUMNS, 
     NON EMPTY Filter(NonEmpty(CROSSJOIN({[Basic].[Payment Method].&[Cash],   
                            [Basic].[Payment Method].[All].[ChequePayment]},  
                            [Date].[H_Date].[Month].AllMembers),  
                            {[Measures].[Revenue]}), 
                            DATEADD("m",-1,DATEADD("m",DATEDIFF("m",CDate(36526),NOW()),CDate(36526))) <= [Measures].[DateFilter] AND [Measures].[DateFilter] < DATEADD("m",0,DATEADD("m",DATEDIFF("m",CDate(36526),NOW()),CDate(36526)))) 
    DIMENSION PROPERTIES [MEMBER_CAPTION] ON ROWS 

FROM [[email protected]].[[email protected]] 
WHERE ([Location].[LocationName].&[@LocationID])'); 

매개 변수는 'FROM'및 'WHERE'절의 쿼리 끝에 만 사용됩니다. 프로젝트 OLAP 큐브의 이름은 "OLAPProject_ @ AccountID"입니다. 이 매개 변수를 사용하여 쿼리에서 올바른 프로젝트를 여는 방법은 무엇입니까? 당신이 문자열 @mdxString에 매개 변수를 공급해야하는 경우

답변

1

당신은 다음과 같은 쿼리를 구성 할 수 있으며 단지 정상 '동적 SQL'를 사용 :

CREATE PROCEDURE [dbo].[PaymentMethod] 
(
    @AccountID BIGINT, 
    @LocationID BIGINT 
) 
AS 
BEGIN  


DECLARE @mdxString AS NVARCHAR(3000); 
SET @mdxString = 
' 
     WITH MEMBER [Measures].[DateFilter] AS ''CDATE([Date.H_Date].CURRENTMEMBER.MEMBERVALUE)'', SOLVE_ORDER = 0, SCOPE_ISOLATION = CUBE MEMBER [Basic].[Payment Method].[All].[ChequePayment] AS ''[Basic].[Payment Method].[Amex] + [Basic].[Payment Method].[Master] + [Basic].[Payment Method].[Visa]'', SOLVE_ORDER = 0, SCOPE_ISOLATION = CUBE 
     SELECT 
      {[Measures].[Revenue]} DIMENSION PROPERTIES [MEMBER_CAPTION] ON COLUMNS, 
     NON EMPTY Filter(NonEmpty(CROSSJOIN({[Basic].[Payment Method].&[Cash],   
     [Basic].[Payment Method].[All].[ChequePayment]},  
     [Date].[H_Date].[Month].AllMembers),  
     {[Measures].[Revenue]}), 
     DATEADD("m",-1,DATEADD("m",DATEDIFF("m",CDate(36526),NOW()),CDate(36526))) <= [Measures].[DateFilter] AND [Measures].[DateFilter] < DATEADD("m",0,DATEADD("m",DATEDIFF("m",CDate(36526),NOW()),CDate(36526)))) 
       DIMENSION PROPERTIES [MEMBER_CAPTION] ON ROWS 
    FROM [[email protected]].[[email protected]] 
    WHERE ([Location].[LocationName].&[@LocationID]) 
' 



SELECT 
    Names = CONVERT(VARCHAR(100), "[Basic].[Payment Method].[Payment Method].[MEMBER_CAPTION]"), 
    Revenue = CONVERT(NUMERIC(18,2),CAST("[Measures].[Revenue]" AS FLOAT)) 
    FROM 
    OPENQUERY(
    [LG], 
    @mdxString 
); 

END; 
+0

이 매개 변수는 그런 식으로 작동하지 않습니다, 난 당신을 생각 @mdxString에서 이들을 연결해야합니다. 그 이외의. 이게 방법이다. – mxix

+1

@mxix 헤이 업 - 매개 변수가 그런 식으로 작동하지 않는다는 것을 알고 있습니다. 조금 놀랍습니다. 사용자가 Google에 "동적 SQL"을 붙이면 문자열에서 매개 변수를 가져 오는 방법에 대한 많은 도움이됩니다. – whytheq

관련 문제