2009-02-18 3 views
1

Я новичок в отчетности svcs, и я пишу отчет на основе модели отчета (.smdl), созданной в VS.NET 2008. Я, кажется, упускаю из аналога запроса запроса построителя отчета «левое соединение» «. Модель очень проста:Как смоделировать «левое соединение» в службах отчетов SQL Server?

Три лица: корка (CustID, custname) Ord (ordid, CustID, orddate, ...) Charge (chargeid, ordid, chargetype, chargevalue ...)

Подумайте о «заряде» в качестве дополнительной стоимости (специальный сбор), связанной с заказом - некоторые заказы есть у них, а некоторые нет.

Модель была автоматически сгенерирована с учетом различных видов (.dsv), которые точно указывают отношения между cust и ord, а также между ord и charge. Я отметил, что при разработке отношений представления не было никакой возможности указать (например), что отношение должно рассматриваться как «левое соединение».

Теперь я перехожу к построителю отчетов 2 (RB2) для разработки отчета на основе этой модели. Моя цель - просто перечислить для каждого заказа: имя клиента, дату заказа, тип оплаты, стоимость заряда (т. Е. Строка заказа повторится, если у нее было более одного типа заряда). Я хочу, чтобы ВСЕ заказы перечислялись, даже если в заказе нет никаких сборов - что я бы назвал «левым соединением» в традиционном смысле.

Я использую конструктор запросов RB2 для создания набора данных и просто выберите (например, дважды щелкните) объекты, которые я хочу в качестве полей в отчете: custname, orddate, chargetype, chargeval. Затем я создаю простую таблицу в отчете на основе этого набора данных.

При запуске отчета я получаю только те заказы, которые на самом деле имеют сборы. Я скорее надеялся получить все заказы. Есть ли способ указать это?

Спасибо, Билл Доусона

ответ

3

Я получил ответ через форумы SQL Server:

http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/20d4b4fd-dc0b-428e-a5b8-aedf5c53d340

Соответствующая часть здесь Аарон Мейерс:

Ключевым моментом здесь является то, что все модели отчета запросы сосредоточены вокруг «базы сущность ", и каждая строка на уровне детализации в вашем отчете представляет собой строку в этом базовом объекте. Вы можете заметить, что в вашей модели нет сущности, которая соответствует «обвинению в ордере или просто заказе, если у него нет никаких обвинений». Вам нужно явно создать этот объект Order-Charge в модели на основе Именованного запроса в DSV. Этот именованный запрос может просто выбрать ключи из таблицы Ord и таблицы Charge с LEFT OUTER JOIN между ними. Затем вы создаете отношения с этими ключами в таблицах Ord и Charge и обновляете модель (щелкните правой кнопкой мыши на корневом узле Model и Autogenerate).

Когда вы начинаете с деталей из Ord и перемещаетесь по новой роли в Charge и выбираете дополнительные детали, построитель отчетов выбирает объект Order-Charge в качестве корневого/базового объекта отчета.

Мы рассматриваем функциональность для будущей версии, позволяющую создавать эти типы запросов непосредственно в построителе отчетов, не требуя, чтобы дизайнер модели явно создавал объект LEFT OUTER JOIN.

0

Я считаю, что левая присоединяется произойдет на основании того, добавляемого поля на дизайнера запрос холст. Пока вы добавляете поля клиента, затем заказываете поля, затем заряжаете поля, вы должны быть правы.

Вы можете проверить фактический запрос, который был запущен с использованием SQL-профиля, который очень удобен для отладки таких вещей.

0

Мы можем реализовать LEFT JOIN в модели отчета между двумя объектами, используя свойство Cardinality для роли объекта.

Например, предположим, что у нас есть два объекта Customer и Order then.

Клиент -> Роль заказа должна быть опциональным (источник) -> Дополнительно Многие (Target) {Поскольку 1 клиент может иметь 0 или много заказов}

Order -> роль Клиент должен иметь Дополнительный Многие (источник) -> Необязательный один (целевой) {наоборот}

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