2012-07-04 34 views
4

我在AX 2009遇到了一個問題,我不得不承認我基本無能爲力。AX中的數據透視表

我想建立一個視圖(基於AOT查詢與否;但是從我的理解,你可以使用AOT查詢不是嚴格以期做多)使用表看起來像這樣:

id status date 
1  IN  10/10/2011 
1  OUT  11/10/2011 
2  OUT  12/10/2011 
3  IN  13/10/2011 
4  IN  14/10/2011 
4  OUT  15/10/2011 

視圖將理想是這樣的:

id IN_Date  OUT_Date 
1 10/10/2011 11/10/2011 
2 *NULL*  12/10/2011 
3 13/10/2011 *NULL* 
4 14/10/2011 15/10/2011 

在嚴格的SQL甚至使用Microsoft Access這是一個簡單的任務要做,但我無法找到一個方法來做到這一點在2009年AX因爲有在視圖'字段中沒有「AS」選項。我不想使用顯示方法,因爲我希望從AX外部訪問視圖。任何提示將不勝感激!

+0

這與數據透視表有什麼關係? –

+0

它提醒我excel數據透視表,因爲行變成列和列變成行(以某種方式)。 – Max

回答

3

你想在桌子上做一個full outer join(自己加入)。

這不支持在X ++中或作爲查詢joinMode,但可以使用兩個中間視圖進行模擬,其中外聯接與聯合聯合使用。

視圖1:

select id, date as dateIn from table as table1 
    outer join date as dateOut from table as table2 
    where table2.id == table1.id and 
      table1.status == Status::In and 
      table2.status == Status::Out 

視圖2:

select id, date as dateOut from table as table1 
    outer join date as dateIn from table as table2 
    where table2.id == table1.id and 
      table1.status == Status::Out and 
      table2.status == Status::In 

視圖3:

select id, dateIn, dateOut from view1 
union 
select id, dateIn, dateOut from view2 

上面或多或少SQL,其可以變成AX查詢和觀點。

一種方法可以在this answer中給出。

+0

謝謝你的回答。這是一個很好的例子,但如果在某個時候增加了一個新的狀態,並且我們需要另一個列,它可能會變得壓倒一切。我找到了一種通過使用AOT查詢來實現我想要的功能的方法。 – Max

+0

你是怎麼做到的?請告訴。添加外部狀態不會影響視圖,因爲它們只關注「入」和「出」。一個更簡單的解決方案將在表格中添加兩個日期並取消狀態。那麼如果有幾個輸入或輸出相同的ID就沒有問題。 –

+1

我創建了一個沒有任何範圍的主數據源的查詢。我爲每個可能的狀態(即列)添加了一個子數據源。每個子數據源使用OuterJoin,Firstonly和1:1關係進行連接。當然,每個子數據源都使用其唯一的ID鏈接到主數據源,並且其狀態範圍(每個子數據源的範圍不同)。在視圖中,我使用每個具有MIN聚合的子數據源的日期字段。我這樣做,因爲在我的情況下,我可以在不同日期的同一地位上有幾行(我想要最早的日期)。 – Max