0

我正在创建一个 Power BI 分页报表,使用下面的存储过程在报表中传递参数。传递了两个参数,它从一个参数级联到另一个参数,例如 Timeframe 参数作为按月、按周、按日期下拉菜单,它会向下级联到日历日期参数。

在此处输入图像描述

当从 Timeframe 参数中选择 By Month 值时,Calendar Date 参数具有下面的下拉菜单。

在此处输入图像描述

当从 Timeframe 参数中选择 By Week 值时,Calendar Date 下拉菜单将是 在此处输入图像描述

TY 表示当年,LY 表示上一年,例如 LY01 表示上一年第 01 周,TY01 表示当年第 01 周。我创建了下面的存储过程,但它适用于时间范围:按月。如何在存储过程 where 子句中的 LY01、LY02.... 和 TY01、TY02.... 的时间范围和日历日期中合并按周。

请,如何使这项工作,以便在分页报告中传递日历日期参数时将传递给存储过程。

CREATE procedure [dbo].[Test] (
            @CalendarDate varchar(50)
        )
as
begin
   declare @sql nvarchar(MAX)

   SELECT
    i.[Item Nbr]
    ,i.[Brand Name]
    ,i.[Calendar Date] as  Calendar_date
    ,i.[Asda Week]
    , AVG([sell_price])as [Avg_Price]
    , SUM([sell_price]) as [Sell_Price]
    , SUM([wkly_sales])as [wkly_sales]
    , SUM([wkly_qty]) as [wkly_qty]
    FROM dbo.vw_item as i
    WHERE       
    DATENAME(MONTH,i.[Calendar Date]) = CASE
                                        WHEN    RIGHT(@CalendarDate,2) = 'TY' 
                                        THEN    SUBSTRING(@CalendarDate,1,Charindex(' ',@CalendarDate,1)-1)
                                        ELSE    SUBSTRING(@CalendarDate,1,Charindex(' ',@CalendarDate,1)-1)  END

         AND    YEAR(i.[Calendar Date])=  CASE WHEN RIGHT(@CalendarDate,2) = 'TY'  
                                          THEN Year(Getdate())
                                          ELSE Year(Getdate())-1  END
    GROUP BY
    i.[Item Nbr]
    ,i.[Brand Name]
    ,i.[Calendar Date] 
    ,i.[Asda Week]
end
4

1 回答 1

0

您应该将 timeframe 参数传递给存储过程。

您的 where 条件将嵌入案例陈述

时间范围 = 'By Month' 的情况

DATENAME(MONTH,i.[Calendar Date]) = CASE WHEN WIGHT(@CalendarDate,2) = 'TY' THEN SUBSTRING(@CalendarDate,1,Charindex(' ',@CalendarDate,1)-1) ELSE SUBSTRING(@ CalendarDate,1,Charindex(' ',@CalendarDate,1)-1) END ...

当时间范围='按周'然后....

于 2022-02-23T16:08:58.553 回答