0

Можно ли вычислить пропускную способность проката в SSRS с помощью функции RunningValue? Если нет, есть ли другой способ?Ускорение тиража SSRS 2008

В настоящее время я использую выражение для серии оранжевый линии:

=(RunningValue(((Sum(Fields!StartQty.Value) - Sum(Fields!LossQty.Value))/Sum(Fields!StartQty.Value)), SUM, "DataSet1")) 

И получение этого ожидаемого результата из-за SUM агрегата в RunningValue: SSRS Chart Example

Мне нужно, чтобы получить его, чтобы отобразить 0,88 , 0.62, 0.62 вплоть до конца каждого шага, если только он не натолкнул на другой низкий уровень первого прохода на одном шаге.

Так расчет должен быть 0,88 * 0,71 = 0,62

Если он ударил еще один плохой выход на стадии, 0,62 * 0,92 = 0,57 до конца.

Ближе всего я мог бы найти другой вопрос похож здесь на переполнение стека, но не мог придумать, как реализовать это в моем случае: Function equivalent to SUM() for multiplication in SQL Reporting

Edit 1

Я забыл, что вы не можете иметь вложенные агрегаты в SSRS 2008, так что я бы интересно посмотреть, если есть решение для обеих SSRS 2008 и 2012+

Edit 2

В соответствии с просьбой в комментариях, набор выборки данных:

Sample Data

Простого выражение для расчета синих полос является следующим:

=((Sum(Fields!QtyStart.Value) - Sum(Fields!ScrappedQty.Value))/Sum(Fields!QtyStart.Value)) 
+0

Я думаю, что это может быть достигнуто с помощью специального кода, добавьте образцы данных, чтобы воссоздать вашу проблему. –

+0

@alejandrozuleta - Добавлено редактирование набора данных, который я использую (графическое изображение теперь устарело, потому что я добавил ломать к шагу 5, который теперь должен показывать 0,75% [еще не отформатирован до 75,00%]) – HuntK24

+0

В своем примере вы хотите чтобы показать линию с 0,88, 0,62, 0,62, 0,62 ... 0,62, изменится только тогда, когда умножение произведет число меньше 0,62. Я в порядке? –

ответ

0

Я воссоздал свой сценарий с некоторыми более простые данные. Для этого запроса вы можете использовать собственный код для получения каждого значения за шагом.

К Report menu/Report properties.../Code tab. В поле используйте этот код VB:

Dim prev As Double = - 1.0 

Public Function GetYield(ByVal current As Double) As Double 

    if prev = -1.0 then 
     prev=current 
     return prev 
    End if  
    if (current*prev) <= prev then 
     prev = current*prev 
    End if 
    return prev 

End Function 

Теперь добавьте дополнительное выражение к значениям диаграммы.

=Code.GetYield(
    (Sum(Fields!QtyStart.Value) - Sum(Fields!ScrappedQty.Value))/Sum(Fields!QtyStart.Value) 
) 

Для того, чтобы это работает можно только вызвать функцию GetYield один раз в докладе, так как он изменяет переменную prev за вызов и его значение является общим для отчета во время выполнения.

Также обратите внимание, что переменная prev инициализируется -1, чтобы определить, когда функция будет вызвана, если в конечном итоге выражение, которое мы передаем функции, произведет -1, оно вернет неожиданные значения. Установите начальное значение на то, что, как вы знаете, не будет создано.

Он должен производить:

enter image description here

Позвольте мне знать, если это помогает.

+0

Вау! Я не знал, что пользовательский код может использовать поля/свойства вне письменной функции и сохранить его значение. Я чувствую себя глупым, потому что не пытаюсь это сделать. Это именно то, что я просил, спасибо alejandro! Угадайте, что вы каждый день изучаете, как они говорят. – HuntK24