Использование Lookup и SUM в матричном отчете с использованием SSRS 2016 - PullRequest
0 голосов
/ 18 июня 2019

Использование SSRS 2016 и вставка таблицы матричного отчета показывают / рассчитывают месячный тариф и итоговую сумму. Месячная ставка, полученная из поля LookUp, которое ищет PoolCar и извлекает Daily_Cost из другого DataSet, а затем умножает на поле значения Days:

= Lookup(Fields!PoolCar.Value, Fields!Registration.Value, Fields!Daily_Cost.Value, "PoolCar_Costs") * Sum(Fields!Days.Value)

Однако вычисление sum() для этого столбца не работает.
Есть идеи?

Я пытался использовать опцию Variable, но она не допускает агрегации.

Обновление:

enter image description here

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

После бесконечных часов я наткнулся на этот сайт , где он объясняет более подробно.
Важный момент, который я выяснил в конце, - это то, что столбец, в котором используются выражения , должен быть вне группировки!

Следующий код был добавлен в раздел «Код» в свойствах отчета.

Public Shared Value as Double=0
  Public Shared Function GetValue(Item as Double) as Double
     value= value + Item
     return Item
  End Function
  Public Shared Function GetTotal()
     return value
  End Function

Строка данных имеет следующее выражение:

=Code.GetValue( Sum(Fields!Days.Value) * Lookup(Fields!PoolCar.Value, Fields!Registration.Value, Fields!Daily_Cost.Value, "PoolCar_Costs") )

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

=Code.GetTotal()
0 голосов
/ 18 июня 2019

Отредактировано (см. Код, который вы вызываете в выражениях (раздел Detials)):

Вы можете сделать это многими способами.Либо введите сумму в построителе фраз запроса ...

SQL :

SELECT T1.*,
(SELECT Sum(S1.Daily_Cost) FROM YourTableName S1 WHERE S1.Registrations = T1.PoolCar) AS SumYouWantToCalculateBeforeTheReport
FROM YourTable T1

... или вы можете сделать это с помощью пользовательского кода.

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

Код, который вы вызываете в выражении (раздел сведений)

=Code.ValueIWantToSum(Lookup(Fields!PoolCar.Value, Fields!Registration.Value, Fields!Daily_Cost.Value, "PoolCar_Costs"))

Код, который вызывается в выражении после завершения раздела сведений (нижний колонтитул группы)

=Code.DailyCostSum()

Пользовательский код

Private runningtotal As Decimal = 0

Function ValueIWantToSum(svalue As Decimal) as String

    runningtotal = runningtotal + svalue
    Return "added"

End Function


Private DailyCostSum() As Decimal
    Return runningtotal
End Function
...