简体   繁体   English

在SQL Server中计算线性回归

[英]Calculate Linear Regression In SQL Server

I have a query that will return columns: 我有一个查询,将返回列:

StoreNo StoreNo

FiscalWeek FiscalWeek

SalesVar SalesVar

There are 28 stores, 有28家商店,

and Fiscal week is from 25 - 30, 财政周是25-30

And sales is sum of sales variance for that week 销售额是该周销售额差异的总和

I want to contain this within a sub query that will give me an output with: 我想将此包含在子查询中,该查询将为我提供以下输出:

StoreNo StoreNo

LinearRegression ( based on the 6 week sales history [Known Y's] ) LinearRegression(基于6周的销售记录[已知的Y])

I would normally just do this in Excel using LINEST 我通常会使用LINEST在Excel中执行此操作

I'm guessing it would look like: 我猜它看起来像:

Select
A.StoreNo
A.LinearRegressionCalculation

From (SubQuery) A

The Query i use to get the 6 weeks of sales history is: 我用来获取6周销售历史的查询是:

SELECT
    EU.[Store No]                                                                            As 'StoreNo'
    ,SA.FISCALWEEK                                                                           As 'FiscalWeek'
    ,CONVERT(DECIMAL(5,4),
    (  SUM(CASE WHEN SA.FISCALYEAR = 2017  THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END)  /
       SUM(CASE WHEN SA.FISCALYEAR = 2016  THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END)  ) -1) AS 'SalesVar'
FROM 
    [BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU
INNER JOIN
    [EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA
ON 
    EU.[Store No] = SA.BRANCHNO
    And EU.[Store No] In (
    8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756
    )
    And SA.Fiscalweek between 25 and 30
--COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS)
    AND CASE WHEN LEFT(EU.[COMP WEEK],4) < 2017 THEN 'Y' 
             WHEN RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK THEN 'Y' 
             ELSE 'N' END 
             = 'Y'
GROUP BY 
    EU.[Store No]
    ,SA.FISCALWEEK
ORDER BY 
    EU.[Store No]

Worked it out eventually (although results are slighty out on LINEST ) 最终解决了这个问题(尽管LINEST上的结果有些微)

Select
    MYDATA3.StoreNo
    ,slope
    ,ybar - xbar * slope as 'Intercept'
From
(   Select
        MYDATA2.StoreNo
        ,Sum((x - xbar) * (y - ybar)) / Sum((x - xbar) * (x - xbar)) As 'Slope'
        ,Max(ybar) As ybar
        ,Max(xbar) As xbar
    From
    (   Select
            MYDATA.StoreNo
            ,avg(MYDATA.SalesVar) Over (Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'ybar'
            ,MYDATA.SalesVar as 'y'
            ,avg(MYDATA.FiscalWeek) Over(Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'xbar'
            ,MYDATA.FiscalWeek as 'x'
        From
        (   Select
                EU.[Store No]                                                                            As 'StoreNo'
                ,SA.FISCALWEEK                                                                           As 'FiscalWeek'
                ,Convert(DECIMAL(5,4),
                (  Sum(Case When SA.FISCALYEAR = 2017  Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END)  /
                   Sum(Case When SA.FISCALYEAR = 2016  Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END)  ) -1) As 'SalesVar'
            From 
                [BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU
            INNER JOIN
                [EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA
            ON 
                EU.[Store No] = SA.BranchNo
                And EU.[Store No] In (
                8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756
                )
                And SA.Fiscalweek between 25 and 30
            --COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS)
                AND Case When LEFT(EU.[COMP WEEK],4) < 2017 Then 'Y' 
                         When RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK Then 'Y' 
                         Else 'N' END 
                         = 'Y'
            Group BY 
                EU.[Store No]
                ,SA.FISCALWEEK 
                ) MYDATA    ) MYDATA2
    Group BY
        MYDATA2.StoreNo ) MYDATA3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM