2017-03-01 8 views
1

사용자가 2 개의 매개 변수를 선택해야하는 보고서가 필요합니다. 첫 번째 매개 변수는 연도 (2017, 2016 ...)를 포함하고 두 번째 매개 변수는 ID 프로세스를 포함합니다. 사용자가 선택한 프로세스에 따라 SQL 문은 하나가 될 것입니다. 매개 변수 연도는 두 번째 매개 변수에 포함 된 SQL의 WHERE 절의 일부입니다.동적 SQL 쿼리를 매개 변수로 사용

그래서이 보고서에는 2 개의 매개 변수 (param_year, Indicador)가 있습니다. 쿼리 매개 변수는 테이블 데이터 소스를 사용하여 수행됩니다. 여기서 ID 열에 SQL 문장이 포함되고 값 열에는 사용자가 선택해야하는 텍스트가 포함됩니다.

Setting the parameter

그래서 내가 다음에 뭘하는지 나는 데이터베이스에 수행했다는 JDBC 연결의 SQL 문으로 set ${Indicador}이다. 이것은 나에게

는 "쿼리에 실패 SQL 오류보고 :. $ {Indicador을}

Setting the parameter as the SQL statement

어떤 제안

이 이해 될 것이다 사전에 감사

답변

0

또 다른 옵션은 다음 Master/sub Report -> Attributes -> query -> name 속성에 PRD 표현를 사용하여 적절한 데이터 소스를 선택 이다.

더 자세한 설명 :

  1. 는 당신이 필요로하는 모든 SQL 문자열과 매개 변수 테이블에서 SQL 문자열을 이동 (필자는 PRD 데이터 소스를 사용하는 PRD 객체와 같은 쿼리를 의미) 쿼리를 작성 보고서 디자이너 쿼리 정의. query name expression
  2. : parameter table
  3. Master/sub Report -> Attributes -> query -> name 속성에 대한 값으로합니다 (PRD 쿼리 이름과 동일해야 함) 귀하의 매개 변수의 값을 사용
  4. 는 해당 쿼리의 이름, 예를 들어, 사용하여 매개 변수 테이블의 SQL 문자열을 교체
+0

나는별로 틀리지 않았습니다. 그것은 완벽하게 작동합니다. 대단히 감사합니다 !!! – Mascu

0

당신이 필요합니다.. 이러한 종류의 동적 쿼리를 수행하는 Pentaho 데이터 통합 ​​

0

두 쿼리에 대한 테이블 구조 (출력 열) 동일하다면 UNION ALL을 가진 하나의 큰 SQL 문에 함께 넣고 "$ {Indicador} = ValueToRunThisQuery"라는 각 쿼리를 넣을 수 있습니다.

옵티마 이저 은 0이 아닌 행을 리턴하고 실행하지 않을 것임을 알기에 충분히 똑똑해야합니다. 하나의 쿼리에 더 적은 열이 있지만 채워진 열에 대해 데이터 형식이 동일해야하는 경우 몇 개의 null 열을 제공 할 수 있습니다.

출력 테이블 구조가 두 쿼리간에 다른 경우 다른 데이터 소스 또는 보고서에 있어야합니다. 이 당신의 마스터/하위 보고서에 여러 데이터 소스를 만들려면

SELECT ID, BLA, BLA, BLA, ONLY_IN_A 
FROM TABLE A 
WHERE ${Indicador} = "S010" 
UNION ALL 
SELECT ID, BLA, BLA, BLA, NULL 
FROM TABLE B 
WHERE ${Indicador} = "S020"