Проблема с использованием наборов данных из разных баз данных в сводном отчете SSRS - PullRequest
1 голос
/ 17 февраля 2012

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

Я использую UNION ALL в своем запросе, чтобы получить данные из 2 баз данных

MainDataset

Select Count(*) as total, Username from database1
where my condition...
group by Username   
UNION ALL
Select Count(*) as total, Username from database2
where my condition...
group by Username 

Username    Total
User1       2  
User2       1  
User3       3
User4       4
User5       10
User6       5

Набор данных 2

Select Count(*) as totalCol2, Username from database1
where condition for this column...
group by Username   
UNION ALL
Select Count(*) as totalCol2, Username from database2
where condition for this column...
group by Username 

Username    totalCol2
User1       2  
User2       1  
User2       1  
User3       3  
User3       2  
User4       1  
User5       2  
User5       3  
User6       4  

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

Username    Total   totalCol2
User1       2   2  
User2       1   2  
User3       3   5
User4       4   1
User5       10  5
User6       5   4

Я пытался использовать поиск, но получил только первое совпадение из dataset2, функция sum с условием, но она также не работает. Может кто-нибудь подсказать мне, могу ли я что-то сделать в SSRS.

В отчете содержится более 10 столбцов, каждый из которых основан на наборе данных о различиях.

1 Ответ

0 голосов
/ 17 февраля 2012

Самый простой ответ - изменить ваши запросы для наборов данных, чтобы они не возвращали несколько строк: объедините строки в вашем запросе.

Действительно простая версия этого заключается в том, чтобы просто обернуть существующий запрос для Dataset2 во внешний Select ... Group By:

Слегка исправленный набор данных2:

SELECT
   Username,
   SUM(totalCol2) as totalCol2
FROM
(
   SELECT Count(*) AS totalCol2, Username FROM database1
   WHERE condition for this column...
   GROUP BY Username   
   UNION ALL
   SELECT Count(*) AS totalCol2, Username FROM database2
   WHERE condition for this column...
   GROUP BY Username
) AS tableA
GROUP BY Username

Немного больше переписать даст вам:

SELECT
   Username,
   COUNT(*) AS totalCol2
FROM
   (SELECT UserName FROM database1
    WHERE Condition
    UNION ALL
    SELECT UserName FROM database2
    WHERE Condition
    ) AS tableA
 GROUP BY Username

Любой из этих запросов будет хорошо работать с функцией поиска.

Но если ваша база данных1 и база данных2 одинаковы для всех десяти запросов, тогда я бы попробовал их объединить. Может быть что-то вроде:

SELECT
   Username,
   SUM(Col1) AS totalCol1,
   SUM(Col2) AS totalCol2,
   ...
FROM
   (SELECT
      UserName,
      CASE WHEN [columns meet condition for Col1]
       THEN 1 ELSE 0 END AS Col1,
      CASE WHEN [test for condition of Column2]
       THEN 1 ELSE 0 END AS Col2,
      ... 
    FROM database1

    UNION ALL
    SELECT
      UserName,
      CASE WHEN [columns meet condition for Col1]
       THEN 1 ELSE 0 END AS Col1,
      CASE WHEN [test for condition of Column2]
       THEN 1 ELSE 0 END AS Col2,
      ... 
    FROM database2
    ) AS tableA
 GROUP BY Username
...