2016-08-30 2 views
0

Я создал хранимую процедуру в T-SQL с параметрами. Как использовать эти параметры в MDX для определения маршрута к файлу, где локализуется куб OLAP, и в состоянии «ГДЕ»? Это мой запрос ниже:Хранимая процедура T-SQL с параметрами с использованием MDX

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». Как я могу использовать этот параметр для открытия правильного проекта в запросе?

ответ

1

Вы можете структурировать запрос как следующий и просто использовать нормальный «динамический SQL», если вам нужно кормить параметры в строки @mdxString:

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 hey up - Я знаю, что параметры не работают так - просто немного игриво: если пользователь вставляет «динамический sql» в Google, будет много помощи в том, как вывести параметры из строки. – whytheq

Смежные вопросы