2013-03-26 1 views
1

Я очень новичок в SSRS для Sql Server. Использование 2008. Моя работа попросила меня воспроизвести некоторые устаревшие отчеты с помощью этого инструмента - и я добрался до создания раскрывающихся списков для моих параметров и столкнулся с ошибкой, что многие параметры не поддерживались DB2. Мы используем таблицы PeopleSoft. Моя работа теперь сказала, найдите обходной путь. Я читал много форумов, и я просто ничего не могу получить от земли. Может ли кто-нибудь предоставить ресурс или пройти через то, что мне нужно сделать, чтобы заставить этот отчет позволить моим пользователям выбирать несколько параметров?несколько параметров в SQL для DB2, используя SSRS

SELECT AL1.EMPLID, AL1.NAME, 
     AL4.COVERAGE_ELECT, AL4.FLAT_AMOUNT, 
     AL1.JOBTITLE, AL1.JOB_FAMILY, 
     AL3.ANNUAL_RT, AL3.ANNL_BENEF_BASE_RT, 
     AL4.BENEFIT_PLAN 
FROM TABLEONE AL1, 
    TABLETWO AL2, 
    TABLETHREE AL3, 
    TABLEFOUR AL4 
WHERE (AL1.EMPLID = AL3.EMPLID 
     AND AL1.EMPL_RCD = AL3.EMPL_RCD 
     AND AL1.EMPLID = AL2.EMPLID 
     AND AL1.EMPL_RCD = AL2.EMPL_RCD 
     AND AL1.EMPLID = AL4.EMPLID 
     AND AL1.EMPL_RCD = AL4.EMPL_RCD) 
     AND (AL2.EFFDT = (SELECT MAX(LF.effdt) 
         FROM TABLETWO LF 
         WHERE LF.emplid = al2.emplid 
           AND LF.empl_rcd = al2.empl_rcd 
           AND LF.plan_type = al2.plan_type 
           AND LF.benefit_nbr = al2.benefit_nbr 
           AND LF.effdt <= CURRENT Date) 
      AND AL2.PLAN_TYPE = '20' 
      AND AL2.COVERAGE_ELECT = 'E' 
      AND AL3.EFFDT = (SELECT MAX(J.EFFDT) 
          FROM TABLETHREE J 
          WHERE J.EMPLID = AL3.EMPLID 
            AND J.EMPL_RCD = AL3.EMPL_RCD 
            AND J.EFFDT <= CURRENT Date) 
      AND AL3.EFFSEQ = (SELECT MAX(ES.EFFSEQ) 
           FROM TABLETHREE ES 
           WHERE ES.EMPLID = AL3.EMPLID 
            AND ES.EMPL_RCD = AL3.EMPL_RCD 
            AND ES.EFFDT = AL3.EFFDT) 
      AND AL4.EFFDT = (SELECT MAX(L.EFFDT) 
          FROM TABLETWO L 
          WHERE L.EMPLID = AL4.EMPLID 
            AND L.EMPL_RCD = AL4.EMPL_RCD 
            AND L.PLAN_TYPE = AL4.PLAN_TYPE 
            AND L.BENEFIT_NBR = AL4.BENEFIT_NBR 
            AND L.EFFDT <= CURRENT Date) 
      AND AL4.PLAN_TYPE IN (?) 
      AND AL4.COVERAGE_ELECT= ?) 

ответ

1

Вот ссылка о том, как получить обходной путь, используя несколько параметров, если не помогает вам размещать немного больше на то, что вы сделали, и мы найдем ответ, я работал над подобным вопросом некоторые из них неделей ранее. Вот ссылка: http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/MS-SQL_Reporting/A_8737-SSRS-can-be-also-used-for-user-inputs.html

В основном, что я сделал: 1. Я подключился к источнику данных. Затем я настроил свой DataSet. В наборе данных вы можете ввести оператор выбора, который вы предоставили, или если вы используете хранимую процедуру, вы также можете выбрать эту опцию. В VS есть папка с параметрами. Вы можете добавить оба параметра. Установите его на видимое. Я допустил нулевые значения и пустые значения в случае, если пользователь ничего не выбрал. Я указал значения для моего раскрывающегося списка. И все это на стороне творения. Теперь вы можете вернуться к набору данным и добавить строку:

WHERE column = + @DropdownParameter + 
AND column2 = [email protected] + 

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

FROM TABLETWO 
     WHERE PLAN_TYPE = [email protected]+ 
       AND EFFDT <= CURRENT_DATE 
     GROUP BY EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE) INC 
    ON T4.EMPLID = INC.EMPLID 
     AND T4.EMPL_RCD = INC.EMPLRCD 
     AND T4.BENEFIT_NBR = INC.BENEFIT_NBR 
     AND T4.PLAN_TYPE = INC.PLAN_TYPE 
     AND T4.EFFDT = INC.EFFDT 
    WHERE T4.COVERAGE_ELECT = [email protected]+) AL4 
ON AL4.EMPLID = AL1.EMPLID 
AND AL4.EMPL_RCD = AL1.EMPL_RCD 
+0

Ну, как я уже упоминал, я НОВЫЙ к этому. Исходя из Hyperion Intelligence Explorer, который является целым другим животным. Это просто для POC, поэтому мы установили SSRS 2008/Visual Studio, и я создал отчет об испытаниях. Я добавил в некоторый SQL (мне придется добавить еще один комментарий из-за длины комментария), чтобы поразить наши таблицы DB2 и использовать только параметр ONE fill in, он работал нормально. Как только я предоставил параметры по умолчанию, error-town. Все, что я читаю, просто говорит: «О, создайте пользовательское соединение или функцию для своих параметров», но я боюсь, что не понимаю. – caro

+0

Хорошо, но чтобы понять вопрос, я хотел бы что-то знать. Вам нужно только представить данные, которые извлекаются из базы данных, вам не нужно выполнять какую-либо другую операцию? – Farkiba

+0

Да, это правильно. – caro

1

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

Это может работа немного лучше:

SELECT AL1.EMPLID, AL1.NAME, 
     AL4.COVERAGE_ELECT, AL4.FLAT_AMOUNT, 
     AL1.JOBTITLE, AL1.JOB_FAMILY, 
     AL3.ANNUAL_RT, AL3.ANNL_BENEF_BASE_RT, 
     AL4.BENEFIT_PLAN 
FROM TABLEONE AL1, 
JOIN (SELECT DISTINCT EMPLID, EMPL_RCD 
     FROM TABLETWO 
     WHERE PLAN_TYPE = '20' 
      AND COVERAGE_ELECT = 'E' 
      AND EFFDT <= CURRENT_DATE) AL2 
    ON AL2.EMPLID = AL1.EMPLID 
    AND AL2.EMPL_RCD = AL1.EMPL_RCD 
JOIN (SELECT T3.EMPLID, T3.EMPL_RCD, T3.ANNUAL_RT, T3.ANNL_BENEF_BASE_RT 
     FROM TABLETHREE T3 
     JOIN (SELECT a.EMPLID, a.EMPL_RCD, a.EFFDT, MAX(EFFSEQ) EFFSEQ 
      FROM (SELECT EMPLID, EMPL_RCD, MAX(EFFDT) EFFDT 
        FROM TABLETHREE 
        GROUP BY EMPLID, EMPL_RCD) a 
      JOIN TABLETHREE z 
       ON z.EMPLID = a.EMPID 
       AND z.EMPL_RCD = a.EMPL_RCD 
       AND z.EFFDT = a.EFFDT 
      GROUP BY a.EMPLID, a.EMPL_RCD, a.EFFDT) INC 
     ON INC.EMPLID = T3.EMPLID 
      AND INC.EMPL_RCD = T3.EMPL_RCD 
      AND INC.EFFDT = T3.EFFDT 
      AND INC.EFFSEQ = T3.EFFSEQ) AL3 
    ON AL3.EMPLID = AL.EMPLID 
    AND AL3.EMPL_RCD = AL1.EMPL_RCD 
JOIN (SELECT T4.EMPLID, T4.EMPL_RCD, 
      T4.COVERAGE_ELECT, T4.FLAT_AMOUNT, T4.BENEFIT_PLAN 
     FROM TABLEFOUR T4 
     JOIN (SELECT EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE, MAX(EFFDT) EFFDT 
      FROM TABLETWO 
      WHERE PLAN_TYPE IN (?) 
        AND EFFDT <= CURRENT_DATE 
      GROUP BY EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE) INC 
     ON T4.EMPLID = INC.EMPLID 
      AND T4.EMPL_RCD = INC.EMPLRCD 
      AND T4.BENEFIT_NBR = INC.BENEFIT_NBR 
      AND T4.PLAN_TYPE = INC.PLAN_TYPE 
      AND T4.EFFDT = INC.EFFDT 
     WHERE T4.COVERAGE_ELECT = ?) AL4 
    ON AL4.EMPLID = AL1.EMPLID 
    AND AL4.EMPL_RCD = AL1.EMPL_RCD 

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

+0

+1 ... хороший код, но я не вижу, где вы добавили деталь для выбора в соответствии с параметром? Это выглядит лучше с присоединениями, хорошая работа – Farkiba

+0

@Farkiba - я не смог изменить это, и, к сожалению, я ничего не знаю о SSRS. Единственным вариантом может быть динамический SQL для предложения 'IN' (конечно,' COVERAGE_ELECT' может быть регулярным маркером параметра). –

1

Используйте несколько вопросительных знаков для всех ваших параметров. Обязательно сопоставляйте каждую из вопросительных знаков с параметром, соответствуя им в правильном порядке. Как и несколько других устаревших DB (например, Ingres DB), IBM DB2 не поддерживает именованный параметр в запросе, поэтому используйте [?] Для всех ваших параметров. Остальные шаги одинаковы с вашим другим дизайном отчетов.

Я думаю, что это также зависит от того, какой драйвер вы используете для своего отчета. Это драйвер, который я использую для своих отчетов DB2. Оно происходит от ЖАБА Анализировать от Quest Inc.

IBM DB2 ODBC DRIVER - TACOM27

Это ваш запрос:

выберите * из TABLEA

где field1 =?

и field2 =?

Это ваши параметры:

? = [@ para1]

? = [@ para2]