2012-04-24 6 views
2

Dynamics AX 2012には、HcmWorkerテーブルとHcmEmploymentテーブル(他の中のもの)で構成されるAOTクエリがあります。私の問題は、SSRSではなくレポートを作成するときや、このクエリを使用するときに、HcmEmployment内の有効な時刻状態の従業員しか取得できないということです。AOTクエリの有効な時間状態を回避する

私はこの表に記録されているすべての従業員を、現在の雇用がなくても1回だけ取得したいと考えています。最適な解決策は、現在の雇用がある場合はHcmEmploymentからレコードを取得し、それ以外の場合は開始日が「今すぐ」の最後のレコードを取得することです。しかし、私は最後の開始日に参加するソリューションを受け入れることができます。

コードを使用するたびに(つまりAOTクエリで解決する)コードを追加する必要がないソリューションが望ましいです。

コードからクエリのvalidTimeStateDateTimeRangeプロパティを設定しようとしましたが、従業員に複数の雇用がある場合は重複した行になりました。

HcmEmploymentデータソースをExistsJoinとfirstOnlyに設定すると、ビューでは機能しますが、レポートでは機能しません(レコードは重複します).(レポートでこのビューを使用することはオプションではありません。 HcmEmploymentからDefaultDimensionにフィルタリングするために、私はそれを見たよう

どのように私はこの問題を解決することができ

答えて

4

私はレポートが正しくAOTクエリからプロパティ(ExistsJoin)を継承していないいくつかの理由について...

を自分自身の問題を「解決」。クエリーを再度レポートにドロップした後、一部のコンパイルとクエリーの次のコードinitメソッドが動作します。これ以上の重複レコードはありません!

this.query().validTimeStateDateTimeRange(DateTimeUtil::minValue(), 
             DateTimeUtil::maxValue()); 
0

、あなたは矛盾するオプションがあります。?

を私はレコードを持っているすべての従業員を取得したいと思います現在の雇用者がいなくてもこの表

と:雇用た場合、雇用上のユーザフィルタは、従業員はその後、printetする必要がある場合

ユーザーがHcmEmployment

からDefaultDimensionにフィルタリングできるようにする必要があります選択されていませんか?あなたはおそらくたい何

  • HcmEmploymentにフィルタリングされていない場合は、そのデータソース(プロパティEnabled)を無効にします。

  • HcmEmploymentでフィルタリングする場合は、既存の結合を使用します。

いずれの場合も、maxof(ValidFrom)、maxof(ValidTo)を独立した選択で見つける。

コードでクエリのプロパティを編集する方法については、this answerをご覧ください。

または2つのレポートを作成します.1つはクエリの有無にかかわらず、HcmEmploymentです。

+0

ユーザーフィルタと一致するレコードがない場合、従業員は印刷しないでください。 ANYレコードが一致する場合、その従業員は一度印刷する必要があります。あなたのソリューションは、クエリが使用されている場所(MANYレポート)のすべての場所でかなりのコードを必要とします。私はこれを避けることを望んでいます。しかし、提案に感謝:) –

+0

2番目のオプションを取って 'ExistsJoin'を使い、seperat selectの残りのフィールドを見つけてください。 –

+0

もし 'ExistsJoin'を使うと、私はまだ重複したレコードを取得します。あなたは 'maxof'をどうやって使うといいと思いますか?私が使用できることがわかる唯一の方法は、HcmEmploymentデータソースを無効にすることです。従業員を反復するときに、(ユーザー範囲を使用して)雇用者がいるかどうかを確認できます。残念なことに、多くの従業員を抱えるデータベースではパフォーマンスがひどくなります。それは解決策ですが、私がより良いものを見つけられなければ、それを使うことを検討します。 –

関連する問題