我希望按天名称获得12周平均销售额(IE周一价值12周......) 但我希望不会因为商店关闭而导致零值。Example of 12 Weeks with Zero's
我写了一个脚本来尝试排除Zero的
select
de.[Restaurant Name]
,dd.[DayNameOfWeek]
,dd.[FinancialWC]
,AVG([Net]) OVER (PARTITION BY dw.[RedCatID], dd.DayNameOfWeek
ORDER BY dw.[RedCatID], dd.[FullDate] ROWS 11 PRECEDING ) as [12 Week]
from Daily_Sales_Summary dw
inner join Restaurant_View de on de.RedCatID = dw.[RedCatID]
inner join DimDate dd on dd.[DateKey] = dw.[DateKey]
where [net] <> '0'
group by de.[Restaurant Name]
,dw.[RedCatID]
,dd.[DayNameOfWeek]
,dd.[FullDate]
,dd.[FinancialWC],[Net]
order by [Restaurant Name] asc
这确实给了我想要的平均值,但是在零值
的日子里没有产生任何结果Query Results showing missing dates
如何在不错过零零点的情况下如何做到这一点? 如果存在零而不是排除它,如果这是一个更简单的解决方案,我很高兴让它再回去一周。
答案 0 :(得分:0)
你需要在这里有点创意才能包含行,但不能平均计算它们。尝试下面的代码,看看它是否有效。我还没有测试过它。
基本上,做的是重新定义计算的分母,以给出[NET] <> 0
的行数
编辑:找到比我最初发布的更简单的解决方案
select
de.[Restaurant Name]
,dd.[DayNameOfWeek]
,dd.[FinancialWC]
,avg(nullif([Net],0)) OVER (PARTITION BY dw.[RedCatID], dd.DayNameOfWeek
ORDER BY dw.[RedCatID], dd.[FullDate] ROWS 11 PRECEDING )
as [12 Week]
from Daily_Sales_Summary dw
inner join Restaurant_View de on de.RedCatID = dw.[RedCatID]
inner join DimDate dd on dd.[DateKey] = dw.[DateKey]
group by de.[Restaurant Name]
,dw.[RedCatID]
,dd.[DayNameOfWeek]
,dd.[FullDate]
,dd.[FinancialWC],[Net]
order by [Restaurant Name] asc