2017-05-24 4 views
1

7月1日を月と日に設定したいが、その年の変数がある。常に最新の7月1日の年にデフォルトする必要があります。Cognos 10固定MM/dd、可変年

Cognos 10.2に存在するパラメータ内で作業する必要があります。いくつかのIf文をdate2stringsとstring2date関数で試してみました。また、データを再帰的にフィルタリングするように設計された一連の列も試しました。

ロジック もしcurrent_monthの場合< = 6 then(current_date、-1)else year(current_date)。年をxxxx-06-01または好ましくは06/01/xxxxに連結したい。クエリの計算でエラーではなく実行時エラーが発生し続ける

この時点では、ツリーのフォレストは表示されません。探検を続け、達成されたら解決策を投稿します。

答えて

0

日付を日付形式にし、可能であれば文字列と連結への変換を避けたいとします。 Cognosには、変換することなく日付を操作するためのネイティブ関数がいくつか用意されています。あなたは裏返し、それを調べる場合

_add_years(
    _add_months(
     _first_of_month(
      current_date 
     ), 
     7 - extract(
      month, 
      current_date 
     ) 
    ), 
    floor(
     extract(
      month, 
      current_date 
     ) 
     /7 
    ) - 1 
) 

それは容易に理解する:

はここにあなたの表現です。

_first_of_month()関数は、当月の最初の日を返します。次に、数式を使用して_add_months()関数に渡すオフセットを決定し、現在の月の最初の値を今年の7月の最初の値に変換します。最後に、計算を再度使用して_add_years()関数を使用して結果の日付に0年または1年を追加します。すべての月が7未満の場合は-1を加算し、7以上の場合は0を加算します。

+0

お返事ありがとうございます。もっと長い時間あなたの表現を探検します。私は上で動作するソリューションを投稿しました。私の解決策を批判するように自由に感じてください。 – Gilgo

0

これは機能します。まだ_make_timestamp()が現在の開始日を魔法のように知っているかどうかを調べようとしていますか?

場合、(月(CURRENT_DATE)< 7)(_make_timestamp([今日の年] - 1、7、1))他 場合は、(月(CURRENT_DATE)> 6)(_make_timestamp([今日の年] + 0、7、1))else NULL

+0

あなたのソリューションもうまくいくはずです。私はここに「魔法」は見当たりません。会計年度の開始日がIF条件に暗黙のうちにどのようなものかを伝えています。月が6歳以下の場合は1会計年度、7歳以上の場合は次年度になります。 – Johnsonium

+0

はい、解決策は機能します。いくつかの繰り返しを経て実行してください。あなたの時間を感謝します。 – Gilgo

関連する問題