Ошибка функции SSRS LOOKUP - PullRequest
       10

Ошибка функции SSRS LOOKUP

0 голосов
/ 14 сентября 2018

Мне кажется, я нашел ошибку в SSRS или, может быть, мне чего-то не хватает.

В основном, если я использую поиск в текстовом поле между двумя диаграммами, значения legend на втором графике неверны, функция поиска не найдет несоответствующего совпадения, но это «должен» быть в порядке, так как в документации сказано, что он вернет первое значение. На самом деле текстовое поле, которое использует поиск, возвращает то, что я ожидал, а диаграмма, которая следует сразу за ней, идет не так.

Я начну с результата, а затем кратко расскажу, как его воспроизвести.

На изображении ниже вы увидите 2 круговых диаграммы: первая фильтруется (через фильтры диаграмм) на Chart =1, а вторая на Chart =2. Они оба получают свои данные из одного и того же набора данных (dsCharts), результаты которого показаны в таблице под диаграммами.

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

Это было построено с использованием VS2015 и SSRS 2016. Развернутая версия также показывает ту же ошибку, так что это не просто вещь Visual Studio.

enter image description here

Верхняя запись легенды на 2-м графике должна показывать «Мега бренд», но она показывает последнюю запись на приведенном выше графике. Фактические данные пирога верны (48%)

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

Если я переместу текстовое поле ниже 2-го графика, оно будет работать как положено.

enter image description here

Функция LOOKUP работает следующим образом.

=LOOKUP(2, Fields!Chart.Value, Fields!Title.Value, "dsCharts")

Как вы можете видеть, это не будет возвращать уникальное значение (это нормально, хотя и при возвращении правильного значения).

Если я изменю поиск, чтобы вернуть уникальное значение, подобное этому ...

=LOOKUP(3, Fields!Chart.Value + Fields!rnk.Value, Fields!Title.Value, "dsCharts")

Все работает. (Выше просто добавляются столбцы диаграммы и столбцы rnk, так что три всегда получат первый заголовок из 2 строк диаграммы)

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

ВОПРОС

Я что-то здесь упускаю? Это, конечно, не похоже на «особенность дизайна».

Ссылка ниже - это RDL на тот случай, если кто-то захочет его протестировать. (Вам нужно изменить информацию о соединении на фактический сервер / базу данных, но в остальном она должна просто работать.

https://1drv.ms/u/s!AvWOxxoIjY1UlxJBS7uwiAc4godK

Вот SQL для создания набора данных dsCharts на случай, если вы хотите начать с нуля.

DECLARE @t TABLE (CHart int, SegID int, Caption varchar(50), PeriodID int, PeriodDesc varchar(10), Title varchar(50), Others int, Amount float, rnk int, PcShare float)
INSERT INTO @t VALUES
(1, 4, 'Mega Brand', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 2641.02756210156, 1, 0.4486715547),
(1, 5, 'Big Brand', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 887.87929700944, 2, 0.1508375718),
(1, 311, 'Average Brand', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 405.48776698076, 3, 0.0688863794),
(1, 3, 'Mediocre Brand', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 399.3852463092, 4, 0.0678496513),
(1, 297, 'Some other brand', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 264.67433915592, 5, 0.0449642589),
(1, 148, 'Cheap stuff', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 0, 342.83011182646, 8888, 0.0582417697),
(1, 141, 'Others', 2017000, '2017', 'Top 5 Brands Volume Share, 2017', 1, 945.042844878088, 9999, 0.1605488138),
(2, 4, 'Mega-Brand', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 4231.13539284372, 1, 0.4825376523),
(2, 5, 'Big-Brand', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 1311.73933399895, 2, 0.1495966354),
(2, 311, 'Average Brand', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 675.765818425164, 3, 0.077067364),
(2, 3, 'Mediocre Brand', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 561.11919104568, 4, 0.0639925485),
(2, 286, 'Smaller brand', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 398.869530857333, 5, 0.0454888698),
(2, 148, 'Cheap stuff', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 0, 398.733393643842, 8888, 0.0454733441),
(2, 141, 'Others', 2017000, '2017', 'Top 5 Brands Value Share, 2017', 1, 1191.14560398701, 9999, 0.1358435857)

SELECT * FROM @t

Чтобы воспроизвести макет, как показано на изображениях выше, поиски в двух текстовых полях такие же, как указано выше, но в первом используется 1 в качестве значения поиска (1-й параметр функции) вместо 2.

...