2012-04-24 46 views
2

我在Dynamics AX 2012中有一個AOT查詢,它由HcmWorker和HcmEmployment表(除其他外)組成。我的問題是,當我創建一個報告(而不是SSRS)或以其他方式使用此查詢時,我只會在HcmEmployment中獲得具有有效時間狀態的員工。AOT查詢中的環境有效時間狀態

我想讓所有在該表中有記錄的員工即使他們沒有當前的工作 - 也只有一次。最佳解決方案是從HcmEmployment獲取當前就業記錄(如果存在),否則記錄最後一個記錄,其起始日期在「now」之前。不過,我可以接受一個解決方案,它與最後一個開始日期一起加入。

我更喜歡一個解決方案,我不需要每次使用它時都添加代碼(即在AOT查詢中解決它)。

我已經嘗試在代碼的查詢中設置validTimeStateDateTimeRange屬性,如果員工有多個職位,會導致重複行。

如果我將HcmEmployment數據源設置爲ExistsJoin和firstOnly,那麼它在視圖中工作,但不在報表上(仍然重複記錄):(在報表上使用此視圖不是一種選擇,因爲用戶需要能夠從HcmEmployment上DefaultDimension過濾

我怎樣才能解決這個問題

回答

4

我「解決」我自己的問題......

出於某種原因,該報告沒有正確地繼承了AOT查詢的屬性(ExistsJoin)。再次刪除查詢報告後,查詢init方法中的一些編譯和以下代碼,它工作:)沒有更多的重複記錄!

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

在我看來,你有衝突的選項:?

我希望得到的是有一個記錄所有員工這張表,即使他們沒有現在的工作

和:

用戶需要能夠從HcmEmployment

上DefaultDimension過濾如果就業上的用戶過濾器,如果員工隨後被printet,如果就業沒有被選中?

你可能會喜歡什麼:

  • 如果HcmEmployment未過濾禁用數據源(財產Enabled)。

  • 如果在HcmEmployment上使用存在連接進行篩選。

在這兩種情況下,通過獨立選擇查找maxof(ValidFrom),maxof(ValidTo)。

看看this answer看看如何通過代碼編輯查詢屬性。

或者製作兩份報告,其中一份帶有和不帶查詢HcmEmployment

+0

如果沒有與用戶過濾器匹配的記錄,則不應打印該員工。如果任何記錄匹配,則該員工應打印一次。你的解決方案需要在每個使用查詢的地方使用很多代碼(很多報告),我希望避免這種情況。但感謝您的建議:) – 2012-04-24 13:02:03

+0

然後採取第二種選擇,使用'ExistsJoin'然後找到seperat選擇剩餘的字段。 – 2012-04-24 13:22:30

+0

如果我使用'ExistsJoin',那麼我仍然會得到重複的記錄。你如何建議我使用'maxof'?我可以看到可以使用的唯一方法是禁用HcmEmployment數據源,並且在遍歷員工時,我可以檢查他們是否有職位(通過使用用戶範圍)。不幸的是,在擁有大量員工的數據庫中,性能會很糟糕。這是一個解決方案,如果我找不到更好的解決方案,我會考慮使用它。 – 2012-04-25 06:47:42