Как добавить итоги из трех таблиц с помощью SSRS - PullRequest
0 голосов
/ 30 августа 2018

(Обновление 8/30: я пересмотрел свой пост с более подробной информацией, надеюсь, это поможет всем.) В моем отчете три набора данных, каждый из которых содержит данные о размере файла с трех разных серверов SQL. Каждый набор данных выглядит так:

DATASET1
SERVERNAME    DATABASE    DATATYPE    FILESIZE
s1            db1         data        5,445
s1            db1         log         2,456
s1            db2         data        6,987
s1            db2         log         9,234

DATASET2
SERVERNAME    DATABASE    DATATYPE    FILESIZE
s2            db5         data         7,145
s2            db5         log          1,223
s2            db6         data        44,345
s2            db6         log          3,456

DATASET3
SERVERNAME    DATABASE    DATATYPE    FILESIZE
s3            dba         data        1,445
s3            dba         log           456
s3            dbb         data        4,556
s3            dbb         log         1,233

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

Я могу легко создать таблицу итогов для каждого набора данных для каждого типа данных (данные и журнал), группирующуюся по типу данных, и получить итоги, которые выглядят примерно так:

Server1         Server2         Server3
Data 34,445     Data 45,185     Data 98,334
Log  23,987     Log  12,993     Log 123,099

Я хочу создать общую сумму для всех трех наборов данных для каждой строки типа данных.

Total
Data  177,964
Log   160,079

Я знаю, как ссылаться на конкретный набор данных с помощью SUM, но это дает мне SUM для обеих строк. Я хочу СУММУ для КАЖДОЙ строки - общие данные и общий журнал для всех трех серверов. Я попытался использовать поиск, как было предложено, но это не дает мне всего, что я хочу. Предложение кода может работать, и я просто не понимаю его и правильно его реализую.

Мой sql использует файлы sys.sys, sys.database_files и sys.dm_os_volume_stats. Я попытался добавить к ним имя сервера, но получаю сообщение «Удаленные вызовы табличных функций запрещены».

Есть предложения? Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Lookup - ваш друг здесь. Вы можете просто вставить таблицу, назначить набор данных первому набору данных и получить оттуда значения. Добавить еще один столбец, а затем выполнить поиск других наборов данных примерно так:

Для строки данных во ваших вторых столбцах .. у вас будет что-то вроде этого:

=Lookup(Fields!Data.Value, Fields!Data.Value,  Fields!Data.Value, "Dataset2")

Для строки журнала во ваших вторых столбцах .. у вас будет что-то вроде этого:

   =Lookup(Fields!log.Value, Fields!log.Value,  Fields!log.Value, "Dataset2")

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

Теперь у вас есть все три столбца из трех разных наборов данных ... вам просто нужно вставить другой столбец и сделать сумму элементов отчета!

Затем вы можете скрыть остальные три и показать только столбец суммы или показать все из них .. до вас

0 голосов
/ 30 августа 2018

Предположим, у вас есть 2 набора данных со следующими данными:

Server1Data        Server1Number
34,445             1
12                 2

Server2Data        Server2Number
45,185             1
3                  2
5                  2

Ваш tablix привязан к Server1DatasetName. С Lookup вы получите следующий результат:

=Fields!Server1Data.Value 'Column1 expression
=Lookup(Fields!Server1Number.Value, Fields!Server2Number.Value, Fields!Server2Data.Value, "Server2DatasetName") 'Column2 expression

Column1    Column2
------------------
34,445     45,185
------------------
12         3      'The first match he finds

С LookupSet вы получите следующий результат:

=Fields!Server1Data.Value 'Column1 expression
=Join(LookupSet(Fields!Server1Number.Value, Fields!Server2Number.Value, Fields!Server2Data.Value, "Server2DatasetName"), VbCrlf)

Column1    Column2
------------------
34,445     45,185
------------------
12         3
           5      'Both matches seperated with VbCrlf in one row
------------------

Но есть и третий вариант. Вы поместили эту функцию в свойствах своего отчета в Код .

Function SumLookup(ByVal items As Object()) As Decimal  

If items Is Nothing Then  
    Return Nothing  
End If  
Dim sum As Decimal = New Decimal()  
sum = 0  
For Each item As Object In items  
    sum += Convert.ToDecimal(item)  
Next  
return sum 

End Function

Теперь в вашей таблице:

=Fields!Server1Data.Value 'Column1 expression
=Code.SumLookup(LookupSet(Fields!Server1Number.Value, Fields!Server2Number.Value, Fields!Server2Data.Value, "Server2DatasetName")) 'Column2 expression

Column1    Column2
------------------
34,445     45,185
------------------
12         8     'Sum of both matches
0 голосов
/ 30 августа 2018

СУММА верна, просто обязательно добавьте в группу любой столбец, содержащий значения «Данные» и «Журнал». Чтобы оно отображалось так, как указано выше, добавьте это поле в «Группы строк», а размер - в «Значения». Не указывайте имя сервера.

...