0

現在、次の 3 つのレベルでグループ化されている損益レポートがあります。 1. 薬局 2. 顧客 3. パッケージ タイプ

薬局、顧客、パッケージ タイプの値を入力するようにユーザーに促すレポートを設定しました。詳細バンドには、収益やマージンなどのメジャーが表示されます。薬局、顧客、またはパッケージ タイプのデフォルトを選択すると、グループ内のすべての値が返されます。

私は疑問に思っています - ユーザーがパラメーターに「デフォルトを使用」を選択した場合、iReport にグループ化をロールアップするように指示する方法はありますか? 現在、薬局と顧客を選択しても、パッケージ タイプにデフォルトを使用すると、複数のパッケージ タイプのそれぞれについて詳細バンドが表示されます。すべてのパッケージ タイプを合計するように iReport に指示するにはどうすればよいですか? または、顧客が指定されていない場合、特定の薬局のすべての顧客を合計しますか? それとも、クエリでそれを行うことができますか? Oracle データベースがあり、iReport Professional 4.5.1 を使用しています。

ありがとう、リサ

コードを追加するために編集:

 SELECT
      FAC.FILL_MONTH AS FILL_MO,
      FAC.PHAR_CODE AS PHAR_CODE,
      FAC.FAC_ID AS FAC_ID,
      FAC.PACKTYPE_CODE AS PACKTYPE,
      SUM(FAC.TOT_RXCOUNT_NUM) AS RX_COUNT,
      SUM(FAC.TOT_REVENUE_AMT) AS REVENUE,
      SUM(FAC.TOT_COGS_AMT) AS COGS,
      SUM(FAC.TOT_MARGIN_AMT) AS MARGIN
 FROM
      MySchema.Table FAC
 WHERE
      FAC.FILL_MONTH BETWEEN $P{startdate} AND $P{enddate}
      AND $X{IN, FAC.PHAR_CODE, pharmacy}
      AND $X{IN, FAC.FAC_ID, facility}
      AND $X{IN, FAC.PACKTYPE_CODE, packtype}
 GROUP BY
      FAC.PHAR_CODE,
      FAC.FAC_ID,
      FAC.PACKTYPE_CODE,
      FAC.FILL_MONTH
 ORDER BY
      PHAR_CODE ASC,
      FAC_ID ASC,
      PACKTYPE ASC,
      FILL_MO ASC
4

2 に答える 2

3

必要な生データを正確に取得するための正しい SQL があります。PACKTYPEただし、ユーザーが no を指定する特別な場合に (および他のフィールド) を強制的に異なるグループにするには、それを変更する必要がありますPACKTYPE

新しいパラメータを作成します$P{PACKTYPE_SELECT_SQL}。そのデフォルト値は、既存のパラメータの値に直接基づいています$P{packtype}。(これは$P{packtype}、.jrxml で最初に表示される必要があることを意味します。)$P{PACKTYPE_SELECT_SQL}のデフォルト値を次のように設定します。

$P{packtype}==null ? " 'All Package Types' " : " FAC.PACKTYPE_CODE "

次に、SQL クエリを次のように変更します (変更されるのは 1 行のみで、残りはコンテキストのためだけです)。

SELECT
     FAC.FILL_MONTH AS FILL_MO,
     FAC.PHAR_CODE AS PHAR_CODE,
     FAC.FAC_ID AS FAC_ID,
     $P!{PACKTYPE_SELECT_SQL} AS PACKTYPE,
...
WHERE
     FAC.FILL_MONTH BETWEEN $P{startdate} AND $P{enddate}
     AND $X{IN, FAC.PHAR_CODE, pharmacy}
     AND $X{IN, FAC.FAC_ID, facility}
     AND $X{IN, FAC.PACKTYPE_CODE, packtype}

が null でない場合$P{packtype}、生成された SQL は以前とまったく同じになります。ただし、$P{packtype}が null の場合は、PACKTYPE_CODE の代わりにハードコードされた文字列が取得されます。

おそらく、あなたのレポートは にグループ化されていPACKTYPEます。そのため、レポートのレイアウトとグループ化を変更せずにそのままにしておくことができます。

ブール入力コントロールを追加して、レポートに PACKTYPE を保持するかどうかをユーザーが明示的に選択できるようにするなどのバリエーションを想像できます。しかし、この基本的な考え方で、必要なものが得られるはずです。

于 2012-06-11T16:19:19.537 に答える
2

私はクエリでそれをやろうとします。クエリを見ずに詳細を説明するのは難しいですが、例として私のコードをいくつか提供できます。この特定の jasper レポートでは、ユーザー指定の PGM_NAME と USER_NAME に基づいて値を表示しています。ただし、これらのパラメーターの指定はオプションです。パラメータが指定されていない場合、デフォルトでは、すべての PGM_NAME および/または USER_NAME について報告されます。私の ireport クエリでは、WHERE 句に次の行があります。

WHERE   ($P{PGM_NAME} IS NULL OR job.pgm_name = $P{PGM_NAME})
AND     ($P{USER_NAME} IS NULL OR details.username = $P{USER_NAME})

これは魅力のように機能します。これが、独自のクエリを調整する方法を決定するのに役立つことを願っています. これについて支援が必要な場合は、質問自体を質問に投稿してください。

于 2012-06-05T13:19:09.503 に答える