Устранение некоторых больших значений при использовании функции SSRS MAX - PullRequest
0 голосов
/ 11 июля 2020

У меня есть несколько таблиц, которые используют SSRS для ежедневного импорта максимальных значений из нескольких строк в каждой таблице. Иногда мы получаем некоторые ненормальные показания, которые необходимо опустить и использовать следующее максимальное значение.

Например: у меня есть таблица со значениями «26,28,29,31,23,22,34,99999,27, 20 дюймов в строках.

Таким образом, максимальное значение = 99999, но мне нужно опустить это значение, так как это ненормальное значение и нужно получить максимальное значение как 34.

Есть ли какой-либо способ делать в SSRS?

Или просто решение для определения второго по величине значения?

1 Ответ

2 голосов
/ 11 июля 2020

Один из вариантов - создать нормализованные числа .

Просто для проверки результатов сумма нормализованного числа должна быть равна нулю +/- некоторая точность.

Пример

Declare @YourTable Table ([SomeVal] int)  
Insert Into @YourTable Values 
 (26)
,(28)
,(29)
,(31)
,(23)
,(22)
,(34)
,(99999)
,(27)
,(20)
 

;with cte as (
Select *
      ,NormNbr=([SomeVal]-avg([SomeVal]) over()) / stdev([SomeVal]) over()
 From @YourTable
)
Delete from cte where abs(NormNbr)>1   -- You may want to tweak as needed

Select * from @YourTable

Обновленная таблица -

SomeVal
26
28
29
31
23
22
34
27
20

ИЛИ если вы НЕ хотите удалять аномальные строки

;with cte as (
Select *
      ,NormNbr=([SomeVal]-avg([SomeVal]) over()) / stdev([SomeVal]) over()
 From @YourTable
)
Select MaxValue = max([SomeVal])
 From  cte 
 Where abs(NormNbr)<=1

Возвращает

MaxValue
34

РЕДАКТИРОВАТЬ: если бы вы выполняли запрос в CTE, это то, что вы бы см.

введите описание изображения здесь

...