Cognos 11 Crosstab - нужно значение, которое не имеет ссылки на значения столбца - PullRequest
0 голосов
/ 08 мая 2018

Crosstab report работает на 99%. Около 20 рядов, все, кроме одного, в порядке. 5 колонок - подразделение компании. Строки - это такие вещи, как стоимость, доход, доход 2 и т. Д. Все работающие строки имеют три атрибута, которые я использую для их выбора: Отчетный год период Решение. Проблема в том, что есть таблица, в которой перечислены ставки с начала года для каждого периода. Эта таблица не является специфичной для отдела; это компания в целом. Все таблицы связаны с таблицей отчетного периода с финансовым годом и периодом. Таким образом, общий запрос ограничивает данные финансовым годом (? PFiscalYear?) И периодом <=? PPeriod?, Основываясь на результатах запроса страницы. Исходная таблица имеет это: FY_CD PD_NO ACT_CURR_RT ACT_YTD_RT 2018 1 0,36121715 0,36121715 2018 2 0,32471476 0,34255512 2018 3 0,25240906 0,31210183 2018 4 0,33154745 0,31925874 Обратите внимание, что ставка с начала года не является средней из других чисел. Когда я выбираю ACT_YTD_RT в качестве строки, я хочу, чтобы ACT_YTD_RT соответствовал выбранному периоду. То, что я получаю, - это среднее значение, если я устанавливаю агрегацию на среднее значение, или наименьшее, если я устанавливаю ее для других агрегатов. Так что иногда это выглядит правильно (если я бегу за период 1,2,3, так как курс продолжал падать), а иногда это неправильно (период 4 возвращает .3121 вместо .3192). Я пробовал несколько различных методов и могу генерировать данные мусора (итоги, мин, макс, среднее) и перекрестные соединения, но не могу понять, как получить искомое значение. Я хочу YTD_RT, где финансовый год =? PFiscal? и period =? pPeriod ?. </p>

Я попробовал прямое предложение if then: если (sourcetable.fiscalYear =? pFiscalYear?) и (sourcetable.Period =? pPeriod?) тогда (ACT_YTD_RT) но я получаю ошибку как это: «ACT_YTD_RT» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY. (SQLSTATE = 42000, SQLERRORCODE = 8120)

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

Объединение не работает (разное количество столбцов). Не уверен, как будет работать объединение, так как в таблице ставок нет разделения.

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

Если бы я мог просто написать офигенный параметризованный запрос непосредственно в базу данных, я бы сделал это. Но в кросс-таблицах Cognos 11 я не могу найти место для объекта запроса SQL. И это не должно быть необходимым.

Я часами гонялся за этим по кругу.

У кого-нибудь есть идеи?

Спасибо Пол

1 Ответ

0 голосов
/ 08 мая 2018

Итак, более ранняя проблема заключалась в том, что это:

if (sourcetable.fiscalYear =? PFiscalYear?) И (sourcetable.Period =? PPeriod?) Then (ACT_YTD_RT)

Сгенерировал ошибку, подобную этой: «ACT_YTD_RT» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY. (SQLSTATE = 42000, SQLERRORCODE = 8120)

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

всего ( если (sourcetable.fiscalYear =? pFiscalYear?) и (sourcetable.Period =? pPeriod?) тогда (ACT_YTD_RT) )

А теперь "total" предоставляет отсутствующую группу по. И перекрестное соединение в базе данных предоставляет информацию о разделении, поэтому перекрестная таблица счастлива.

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

...