2012-07-04 4 views
4

Я столкнулся с проблемой в AX 2009, и я должен признать, что я в принципе не знаю.Сводная таблица в AX

Я хотел бы построить представление (на основе запроса 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 это нетривиальная задача сделать, но я не могу найти способ сделать это в AX 2009, так как есть no "AS" в полях просмотра. Я не хочу использовать методы отображения, так как я хочу, чтобы представление было доступно из-за пределов AX. Любой намек был бы очень признателен!

+0

Имеет ли это отношение к сводной таблице? –

+0

Это напомнило мне таблицы с превосходными сводами, поскольку строки становятся столбцами, а столбцы становятся линиями (как-то). – 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

Как вы это сделали? Пожалуйста скажи. Добавление внешнего статуса не повлияет на представления, поскольку они связаны только с In и Out. Более простое решение добавило бы две даты в таблицу и удалило бы статус. Тогда не было бы проблем, если есть несколько In или Out с одним и тем же идентификатором. –

+1

Я создал запрос с основным источником данных без какого-либо диапазона. Я добавил дополнительный источник данных для каждого возможного состояния (то есть столбцы). Каждый источник данных был соединен с использованием связи OuterJoin, Firstonly et 1: 1. Разумеется, каждый источник данных был связан с основным источником данных с использованием их уникального идентификатора и имел диапазон по их статусу (различный диапазон для каждого субданного источника). В представлении я использовал поля дат каждого субдиска источника с агрегатом MIN на них. Я сделал это так, потому что в моем случае у меня может быть несколько строк с одинаковым статусом с разными датами (и мне нужна самая старая дата). – Max

Смежные вопросы