1

我在計算標準差(在SSRS/SQl中的子組(以較便利的方式))時存在嚴重問題。這背後的真正原因是我需要計算西格瑪價值(根據六西格瑪原則)或Cpk價值(過程能力),但我的努力停止在標準偏差。SQL或SSRS中的組內標準偏差(或者 - 計算Sigma或Cpk)

我並不強勁,統計數據,但似乎髮網STDEVP在SSRS(和SQL)函數沒有「子組內」計算,我找不到可以做到這一點的功能。下面是顯示我想在SQL/SSRS實現計算步驟的Excel屏幕截圖 編輯:不能發表圖片呢,請看下面

enter image description here

棘手的部分是計算的絕對差之和每對值之間。值的排列順序很重要。我忘了提及在Rbar(第7行)分母中的數字27是樣本大小減1(27)。下面也是SQL表:

DECLARE @Measurements TABLE(Val FLOAT) 
INSERT INTO @Measurements (Val)(
    SELECT 485 
    UNION ALL SELECT 490.6 
    UNION ALL SELECT 490.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 485 
    UNION ALL SELECT 489 
    UNION ALL SELECT 485 
    UNION ALL SELECT 477 
    UNION ALL SELECT 477 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 485 
    UNION ALL SELECT 477 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 482 
    UNION ALL SELECT 482 
    UNION ALL SELECT 482 
) 
SELECT STDEV(Val) FROM @Measurements 

我猜,我需要的東西可以通過使用RollingValue或SSRS一些存儲過程來實現。當然,如果有更聰明的方法來計算Sigma或Cpk,我會很樂意聽到它。

我希望這個問題很好的制定,如果不是請評論。這對我來說非常重要,所以我會很感激任何幫助:)謝謝!

回答

0

我認爲這應該做的伎倆?不知道如何計算27的分母或d2值,所以現在已經硬編碼了它們...

在使用此查詢中,保留行順序非常重要,所以我已經敲擊了值到使用標識列的臨時表 - 如果你的值從表中到來,有是訂購固定的標準,使用row_number() OVER (order by criteria_column)代替

IF OBJECT_ID('tempdb..#values') IS NOT NULL DROP TABLE #values 
CREATE TABLE #values (row INT IDENTITY (1,1),val FLOAT) 
INSERT INTO #values 
    SELECT 485 as val 
    UNION ALL SELECT 490.6 
    UNION ALL SELECT 490.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 485 
    UNION ALL SELECT 489 
    UNION ALL SELECT 485 
    UNION ALL SELECT 477 
    UNION ALL SELECT 477 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 485 
    UNION ALL SELECT 485 
    UNION ALL SELECT 477 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 484.6 
    UNION ALL SELECT 482 
    UNION ALL SELECT 482 
    UNION ALL SELECT 482 



;with stdevs AS 
(
SELECT 
v1.val 
,ABS(v1.val - v2.val) as abs_diff 
,v2.val as value2 
from #values v1 
LEFT OUTER JOIN #values v2 
ON v2.row = v1.row + 1 
) 
SELECT 
avg(val) as average_value 
,sum(abs_diff) as abs_sum 
,sum(abs_diff)/27 as Rbar 
,1.13 as d2 
,(sum(abs_diff)/27)/1.13 as std_dev 
FROM stdevs 
+0

THANKs,這是我所需要的excacly – cuubaa

0

可以計算在SUMCOUNT骨料方面的標準偏差功能:

STDEVP(x) := SQRT((SUM(x^2) - SUM(x)^2/COUNT(x))/COUNT(x)) 
STDEV(x) := SQRT((SUM(x^2) - SUM(x)^2/COUNT(x))/(COUNT(x) - 1)) 

不是最準確的方法,但它很容易。