0

我想使用带有参数的存储过程在 Power BI 中创建分页报表。

这些参数是列名、所选列数的 cols 和其他参数。

For example, I have many columns in my view called vw_Sales, all I want my paginated report to do is whenever any columns are selected then it should return the values of the columns selected.

如何为分页报告编写存储过程?下面的陈述是我写的,但不确定这种方法是否有效或有更好的方法吗?

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