0

パラメータ付きのストアド プロシージャを使用して、Power BI でページ分割されたレポートを作成したいと考えています。

これらのパラメーターは、列名、選択された列の数の列、およびその他のパラメーターです。

たとえば、ビューに と呼ばれる多くの列がありvw_Sales、ページ分割されたレポートで実行したいのは、列が選択されるたびに、選択された列の値を返すことだけです。

ページ分割されたレポートのストアド プロシージャを作成するにはどうすればよいですか? 以下のステートメントは私が書いたものですが、この方法が機能するかどうか、またはより良い方法があるかどうかはわかりませんか?

CREATE PROCEDURE [dbo].[sp_pocSalesReport] 
    (@BrandName varchar(max),
     @StoreName varchar(max),
     @Cols varchar(max),
     @pivot varchar(max),
     @DateFrom varchar(max),
     @DateTo varchar(max))
AS
BEGIN
    DECLARE @sql nvarchar(MAX)

    SELECT 
        'X' as filename,
        CASE WHEN CHARINDEX('item_Nbr', @Cols) > 0 THEN 'item_Nbr' ELSE 'hide' END AS Col1Name,
        CASE WHEN CHARINDEX('item_Nbr', @Cols) > 0 THEN item_Nbr ELSE '' END AS Col1Value,
        CASE WHEN CHARINDEX('brand_id', @Cols) > 0 THEN 'brand_id' ELSE 'hide' END AS Col2Name,
        CASE WHEN CHARINDEX('brand_id', @Cols) > 0 THEN brand_id ELSE '' END AS Col2Value,
        CASE WHEN CHARINDEX('brand_name', @Cols) > 0 THEN 'brand_name' ELSE 'hide' END AS Col3Name,
        CASE WHEN CHARINDEX('brand_name', @Cols) > 0 THEN brand_name ELSE 'NA' END AS Col3Value,
        CASE WHEN CHARINDEX('item_create_date', @Cols) > 0 THEN 'item_create_date' ELSE 'hide' END AS Col4Name,
        CASE WHEN CHARINDEX('item_create_date', @Cols) > 0 THEN [item_create_date] ELSE '01/01/2000' END AS Col4Value,
        CASE WHEN CHARINDEX('Store_Name', @Cols) > 0 THEN 'Store Name' ELSE 'hide' END AS Col5Name,
        CASE WHEN CHARINDEX('Store_Name', @Cols) > 0 THEN [Store_Name] ELSE 'NA' END AS Col5Value,
        CASE WHEN @pivot = 'Day_Of_Week' THEN 'Day_Of_Week_Number' WHEN @pivot = 'Month' THEN 'Month_Number' ELSE 'hide' END AS Col8Name,
        CASE WHEN @pivot = 'Day_Of_Week' THEN [Day_Of_Week_Number] WHEN @pivot = 'Month' THEN [Month_Number] ELSE '0'END AS Col8Value,
        CASE WHEN @pivot = 'Day_Of_Week' THEN 'Day_Of_Week' WHEN @pivot = 'Month' THEN 'Month'  ELSE 'hide' END AS Col7Name,
        CASE WHEN @pivot = 'Day_Of_Week' THEN [Day_Of_Week] WHEN @pivot = 'Month' THEN [Month] ELSE 'NA' END AS Col7Value,
        AVG([Avg_Price]) AS [Avg_Price],
        SUM([Sales]) AS [SALES],
        SUM(Qty) AS [QTY]
    FROM 
        [dbo].[vw_Sales] AS s
    WHERE       
        s.item_create_date BETWEEN @DateFrom AND @DateTo
        AND s.[brand_name] IN (SELECT value 
                               FROM STRING_SPLIT(@BrandName, ',') 
                               WHERE RTRIM(value) <> '')
        AND s.[Store_Name] IN (SELECT value 
                               FROM STRING_SPLIT(@StoreName, ',') 
                               WHERE RTRIM(value) <> '')
    GROUP BY
        CASE WHEN CHARINDEX('item_Nbr', @Cols) > 0 THEN item_Nbr ELSE '' END,
        CASE WHEN CHARINDEX('brand_id', @Cols) > 0 THEN brand_id ELSE '' END,
        CASE WHEN CHARINDEX('brand_name', @Cols) > 0 THEN [brand_name] ELSE 'NA' END,
        CASE WHEN CHARINDEX('item_create_date', @Cols) > 0 THEN [item_create_date] ELSE '01/01/2000' END,
        CASE WHEN CHARINDEX('Store_Name', @Cols) > 0 THEN [Store_Name] ELSE 'NA' END,
        CASE WHEN CHARINDEX('Day_Of_Week', @pivot) > 0 THEN [Day_Of_Week] ELSE 'NA' END,
        CASE WHEN @pivot = 'Day_Of_Week' THEN [Day_Of_Week_Number] WHEN @pivot = 'Month' THEN [Month_Number] ELSE '0' END,
        CASE WHEN @pivot = 'Day_Of_Week' THEN [Day_Of_Week] WHEN @pivot = 'Month' THEN [Month] ELSE 'NA' END
END
4

0 に答える 0