0

必要なのは、昨年の当四半期の開始日を出力するデータ項目式です。現在の年を見つけるのは簡単で、その日付から 1 年を引くのも簡単です。しかし、それを超えると行き詰まります。

if現在、四半期ごとに次のような醜い表現があります。

if (extract(month,current_date) in (10,12,12)) then ((extract(year,_add_years (current_date,-1))||'-10-01'))

しかし、私が何をしても、年と日付を日付オブジェクトに変換できる文字列に連結することはできません。上記のコードでは、次のエラーが発生します。

「整数」と「文字」のデータ型の組み合わせでは、操作「加算」は無効です。

を使用して整数を文字としてキャストしようとすると、cast()このエラーが発生します。文字配列を日付に変換しようとすると、このエラーも発生します。

操作「condexp」は、次のデータ型の組み合わせに対しては無効です: 「文字」と「整数」

SQL Server 固有の関数 (SQL Server データベースです) を使用しようとすると、これらの関数がローカル処理に使用できないというエラーが表示されるため、SS 日付演算を使用できないようで、特に適切なものが見つかりません。 Cognos の組み込みの日付関数で。

日付を操作して、既知の日/月の組み合わせに年を追加し、それを日付オブジェクトとして使用するにはどうすればよいですか?

4

2 に答える 2

3

cognos 10.1.1 を使用していますが、動作します。

次のコードを使用して値を取得できます。

_make_timestamp(
  extract(year, _add_years(current_date, -1)),
  (floor((extract(month,current_date)-1)/3)*3+1),
  01
)

以下は、四半期の開始月を取得する簡単な方法です。

(floor((extract(month,current_date)-1)/3)*3+1),

タイムスタンプを日付または文字列に変換できます。

cast(
  _make_timestamp(
  extract(year, _add_years(current_date, -1)),
  (floor((extract(month,current_date)-1)/3)*3+1),
  01
  ),
  date
)

cast(
  cast(
    _make_timestamp(
      extract(year, _add_years(current_date, -1)),
      (floor((extract(month,current_date)-1)/3)*3+1),
      01
    ),
    date),
    varchar(10)
)

さらに、日の値を取得するときに抽出関数を使用できます。

extract(day, _first_of_month (current_date))
于 2012-10-12T09:44:36.173 に答える
0

Cognosに存在するSQLSERVER組み込み関数を使用します。
これが私のために働く表現です:

DATEADD({month},(3)*((DATEPART({quarter},[FullDateAlternateKey]))-1),
DATEADD({YEAR}, DATEDIFF({YEAR}, 0, dateadd({year},-1,[FullDateAlternateKey])), 0))

FullDateAlternateKeyフィールドは、私の日付フィールドです(ADVETUREWORKS DW DBから)。
それでも問題が解決しない場合は、新しい単純なリストレポートでこの式を試して、問題を特定してみてください。

于 2012-10-12T09:18:43.697 に答える