Как настроить коррелированный запрос в менеджере Cognos Framework - PullRequest
0 голосов
/ 16 ноября 2018

Нужна помощь здесь. У меня есть запрос, как следующий. Как мне установить в Cognos Framework? или, как я могу превратить в (несколько) простой запрос. Так тогда я могу настроить, как я сделал для другого запроса?

SELECT 
  isnull((SELECT  distinct   'Y'
  FROM 
  PC  WITH(NOLOCK) 
  join P WITH(NOLOCK) on  PC.POSTN_ID = P.ROW_ID and P.PR_EMP_ID=E.PER_ID
  join  CE WITH(NOLOCK) on  CE.PAR_ROW_ID=P.EMP_ID and E.PER_ID=CE.PAR_ROW_ID 
  where  PC.X_RESEARCH='Y' and PC.CON_ID=F.ROW_ID
  ) ,'N') X_RESEARCH,
  F.ROW_ID,
  E.ROW_ID A
   FROM
   F INNER JOIN G ON (G.CON_ID=dbo.S_CONTACT.ROW_ID)
   INNER JOIN E ON (E.ROW_ID=G.ACTIVITY_ID)

Я уже импортировал физические модели, и мне просто нужно посмотреть, как это сделать в логической модели. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Я просто еще раз посмотрел.Мой предыдущий комментарий не был точным.

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

SELECT coalesce(XR.X_RESEARCH, 'N') as X_RESEARCH
, F.ROW_ID
, E.ROW_ID A

FROM F
  INNER JOIN G ON G.CON_ID = dbo.S_CONTACT.ROW_ID
  INNER JOIN E ON E.ROW_ID = G.ACTIVITY_ID
  LEFT OUTER JOIN (
    select DISTINCT PC.X_RESEARCH
    , P.PR_EMP_ID as E_PER_ID
    , PC.CON_ID AS F_ROW_ID
    FROM PC
      INNER JOIN P  ON PC.POSTN_ID = P.ROW_ID
                   AND P.EMP_ID = P.PR_EMP_ID
      INNER JOIN CE ON CE.PAR_ROW_ID = P.EMP_ID
                 --AND CE.PAR_ROW_ID = P.PR_EMP_ID
    WHERE PC.X_RESEARCH = 'Y'
  ) XR ON XR.E_PER_ID = E.PER_ID
      AND XR.F_ROW_ID = F.ROW_ID

У Cognos проблемы с ISNULL.Вам повезет больше с COALESCE.
. Ваше значение X_RESEARCH будет равно Y только тогда, когда P.EMP_ID = P.PR_EMP_ID.
dbo.S_CONTACT еще не включено в предложение FROM, поэтому это все равно не удастся.

Обычно я использую 3 пространства имен непосредственно под основным пространством имен для проекта:

  • Физический уровень
  • Бизнес-уровень
  • Уровень представления

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

Щелкните правой кнопкой мыши на физическом слое и используйте «Мастер импорта метаданных ...», чтобы Cognos создалтемы запросов из вашей базы данных (F, G, E, P, ПК, CE).Похоже, вы уже сделали этот шаг.

В бизнес-уровне создайте тему запроса для каждой из физических тем запроса.Они должны быть «модельными» субъектами запросов.

Создать отношения между субъектами бизнес-запросов.

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

Создайте тему запроса, которая объединит P, PC и CE (я назвал подзапрос XR выше),Добавьте к этому фильтр PC.X_RESEARCH = 'Y'.

Создайте отношения между XR, F и E.

Создайте тему запроса, содержащую ваш окончательный вывод.

0 голосов
/ 16 января 2019

Могу ли я предложить многоуровневый подход в Framework?

Например, первый слой, давайте назовем этот импорт Были бы таблицы, такие как P, PC, E и как они объединяются и любые фильтры Создание субъектов запроса источника данных на этом уровне SQL для ПК с запросом будет

Select * from PC

затем добавить фильтр -

X_Research = 'Y'

Следующим слоем пространства имен будут вычисления, мы можем назвать его слоем dev

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

Name: Activity ID
Expression: Import.G.Activity_ID

Мы могли бы добавить третий слой для презентации

Имеет ярлыки из слоя dev, чтобы сделать модель более долговечной (язык дизайна и изменения надписей)

Дайте мне знать, если вам нравится эта идея, я могу добавить более подробную информацию о том, как собрать эту

...