13

レポート用のデータを生成するストアド プロシージャのレポートと実行に SSRS を使用しています

DECLARE @return_value int

EXEC    @return_value = [dbo].[MYREPORT]
        @ComparePeriod = 'Daily',
        @OverrideCompareDate = NULL,
        @PortfolioId = '5,6',
        @OverrideStartDate = NULL,
        @NewPositionsOnly = NULL,
        @SourceID = 13

SELECT  'Return Value' = @return_value

GO

上記で合格したとき、@PortfolioId = '5,6'間違った入力が得られます

portfolio id 5 and 6 also複数の値を送信するこの正しい方法は、すべてのレコードが必要ですか?

レポートを実行すると、@PortfolioId = '5'それを与えるだけで 120 レコードが得られ、与えて実行すると@PortfolioId = '6'70 レコードが得られます。

したがって、私が与えるとき@PortfolioId = '5,6'、それは私に全部で190個のレコードしか与えないはずですが、それ以上のレコードを与えていません。どこが間違っているのか正確にはわかりません.

誰でも私を助けることができますか?ありがとう

ここに画像の説明を入力

すべてのコードが大きすぎて貼り付けられません。関連するコードを貼り付けています。手がかりを提案してください。

CREATE PROCEDURE [dbo].[GENERATE_REPORT]
(
    @ComparePeriod VARCHAR(10),
    @OverrideCompareDate DATETIME,
    @PortfolioId VARCHAR(50) = '2',   --this must be multiple 
    @OverrideStartDate DATETIME = NULL,
    @NewPositionsOnly BIT = 0,
    @SourceID INT = NULL

)  AS
BEGIN   
SELECT  
            Position.Date,
            Position.SecurityId,
            Position.Level1Industry,
            Position.MoodyFacilityRating, 
            Position.SPFacilityRating, 
            Position.CompositeFacilityRating, 
            Position.SecurityType,
            Position.FacilityType,
            Position.Position

        FROM
            Fireball_Reporting.dbo.Reporting_DailyNAV_Pricing POSITION WITH (NOLOCK, READUNCOMMITTED)
         LEFT JOIN Fireball.dbo.AdditionalSecurityPrice ClosingPrice WITH (NOLOCK, READUNCOMMITTED) ON
                    ClosingPrice.SecurityID = Position.PricingSecurityID AND
                    ClosingPrice.Date = Position.Date AND
                    ClosingPrice.SecurityPriceSourceID = @SourceID AND
                    ClosingPrice.PortfolioID IN (
                SELECT
                PARAM
                FROM
                Fireball_Reporting.dbo.ParseMultiValuedParameter(@PortfolioId, ',')                                             )
4

5 に答える 5

11

これは簡単にはできません。NVARCHARパラメータに「複数の値」をとらせる方法はありません。私が以前に行ったことは、すでに行っているように、パラメーター値をコンマ区切りの値を持つリストのようにすることです。次に、この文字列をストアドプロシージャでその部分に分割します。

分割は、文字列関数を使用して実行できます。すべてのパーツを一時テーブルに追加します。このための擬似コードは次のようになります。

CREATE TABLE #TempTable (ID INT)
WHILE LEN(@PortfolioID) > 0
BEGIN
    IF NOT <@PortfolioID contains Comma>
    BEGIN
        INSERT INTO #TempTable VALUES CAST(@PortfolioID as INT)
        SET @PortfolioID = ''
    END ELSE
    BEGIN
         INSERT INTO #Temptable VALUES CAST(<Part until next comma> AS INT)
         SET @PortfolioID = <Everything after the next comma>
    END
END

次に、条件を次のように変更します

WHERE PortfolioId IN (SELECT ID FROM #TempTable)

編集
SSRSの複数値パラメーターのドキュメントに興味があるかもしれません。

作成する任意のレポートパラメータに複数値パラメータを定義できます。ただし、クエリを使用して複数のパラメータ値をデータソースに戻す場合は、次の要件を満たす必要があります。

データソースは、SQL Server、Oracle、Analysis Services、SAP BI NetWeaver、またはHyperionEssbaseである必要があります。

データソースをストアドプロシージャにすることはできません。Reporting Servicesは、複数値パラメーター配列をストアドプロシージャに渡すことをサポートしていません。

クエリでは、IN句を使用してパラメータを指定する必要があります。

これは私がここで見つけました

于 2012-12-07T13:28:25.823 に答える
2

ユーザー定義テーブルを使用するか

または、この投稿に従って独自の CSV 関数を定義して CSV を使用することもできます。

ストアド プロシージャは既に正しい形式で記述されており、後でこれを行う必要がある場合に便利であるため、2 番目の方法をお勧めします。

乾杯!

于 2012-12-07T13:31:05.210 に答える