2016-06-16 5 views
1

Мне было интересно, может ли кто-нибудь помочь мне в этом вопросе, который у меня был, по крайней мере, через 10 часов после игры с ним. Я собираюсь использовать базу данных Movies из wiseowl, чтобы проиллюстрировать это.SSRS multi axis chart issue

У меня есть следующий SQL:

SELECT FilmReleaseDate 
    ,FilmName 
    ,directorname 
    ,FilmRunTimeMinutes 
    ,directorgender 
    ,CountryName 
    ,datename(M, FilmReleaseDate) AS [month] 
    ,month(FilmReleaseDate) AS [month_no] 
    ,year(FilmReleaseDate) AS [Year] 
FROM tblFilm 
INNER JOIN tblDirector ON directorID = FilmDirectorID 
INNER JOIN tblCountry ON FilmCountryID = CountryID 
WHERE FilmReleaseDate >= '2006-01-01' 

теперь говорит, что я хочу, чтобы поставить это в сложенной диаграмму с фильмами из каждой страны, вторая ось покажет бегущие минуты фильмов. Но проблема здесь в том, что я хочу среднего для всех стран, а не для каждого. Есть ли способ сделать это, поэтому у меня есть 1 строка, а не 3 строки.

Line graph on a stack bar as multi axis DESIGN VIEW вот как из положить выглядит

Preview Mode

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

Если кто-то может помочь, я буду очень признателен, поскольку провел здесь бесчисленные часы. Любая другая информация, которая вам нужна, дайте мне знать.

ответ

1

Попробуйте этот скрипт. Затем используйте новое поле D.AVGFilmRunTimeMinutes на вашем графике. Я добавил псевдонимы на каждую таблицу скрипта. Просто исправьте псевдонимы, если они указывают на неправильную таблицу.

SELECT A.FilmReleaseDate 
     ,A.FilmName 
     ,B.directorname 
     ,D.AVGFilmRunTimeMinutes 
     ,B.directorgender 
     ,C.CountryName 
     ,datename(M, A.FilmReleaseDate) AS [month] 
     ,month(A.FilmReleaseDate) AS [month_no] 
     ,year(A.FilmReleaseDate) AS [Year] 
    FROM tblFilm A 
    INNER JOIN tblDirector B ON directorID = A.FilmDirectorID 
    INNER JOIN tblCountry C ON A.FilmCountryID = B.CountryID 
    LEFT JOIN (SELECT AVG(FilmRunTimeMinutes) AS AVGFilmRunTimeMinutes,FilmDirectorID FROM tblFilm GROUP BY FilmDirectorID) D 
       ON D.FilmDirectorID = A.FilmDirectorID 
    WHERE A.FilmReleaseDate >= '2006-01-01' 
+0

Привет, Олдрин, благодарю вас за ответ, но он все еще, кажется, возвращает линию для каждой страны. Есть ли способ получить только одну строку, чтобы показать это вообще с помощью выражений или чего-то еще? – abs786123

+0

Привет всем, до сих пор нет радости с этим, у кого есть идеи или, возможно, укажут мне в правильном направлении, я исчерпал все варианты :( – abs786123

1

Причина, по которой ваша диаграмма производит 3 строки вместо одной, связана с группировкой в ​​диаграмме за каждый месяц (определяется количеством стран).

я не знаю структуру вашей таблицы, поэтому я бы рекомендовал добавить еще одно поле для набора данных:

YEAR(A.FilmReleaseDate) * 100 + MONTH(A.FilmReleaseDate) AS [YearMonth] 

Это добавит поле в формате YYYYMM

Добавьте это в диаграмма на вашей оси, а не год и месяц_no.

В окне данных диаграммы щелкните раскрывающееся меню рядом с вновь созданной группой категорий за год. Выберите «Свойства группы диаграммы» и скопируйте имя. (Его следует называть чем-то вроде Chart1_CategoryGroup)

Последний шаг - изменить выражение для вашего времени работы фильма на диаграмме.

Нажмите на выпадающее меню рядом с FilmRunTimeMinutes и выберите Свойства серии.

В поле значения используйте следующее:

=Avg(Fields!FilmRunTimeMinutes.Value,"Chart1_CategoryGroup1") 

Замена Chart1_CategoryGroup1 с тем, что называется ваш Категория Group.