2012-04-24 34 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