パラメータ付きのストアド プロシージャを使用して、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