#sql #reporting-services
#sql #отчеты-службы
Вопрос:
У меня есть четыре набора данных в SSRS. Они ниже-
Отправитель- компания, ПОНом подзаголовок- Компания, ПОНом, ПОЛина Порель- компания, количество заданий, POLine, PONum, ProjectID JobHead- Компания, JobCOde, JobNum, PersonID, ProjectID
В POHeader есть текстовое поле (руководитель проекта), в котором я хочу показать идентификатор пользователя (название руководителя проекта). Однако POHeader не содержит никакого поля PersonID. Я думаю, что один из способов сделать это — связать таблицы POHeader и PORel, которые будут соответствовать PONum и возвращать JobNum, а возвращаемое JobNUm будет сопоставлено с JobHead.Количество заданий.
Если они совпадают, то будет возвращен идентификатор пользователя, который будет показан в текстовом поле (Project Lead) в POHeader.
Однако у меня мало опыта в SQL. Было бы здорово, если бы кто-нибудь мог мне помочь в этом отношении.
Решением здесь может быть функция поиска, но сравнение одного возвращаемого значения с существующим значением других данных кажется мне сложным.
ОБНОВЛЕНИЕ кода SQL-
="SELECT
[PlannerID].[JobHead_PersonID] as [JobHead_PersonID]
from (select
[POHeader].[PONum] as [POHeader_PONum],
[JobHead].[PersonID] as [JobHead_PersonID],
[JobHead].[JobNum] as [JobHead_JobNum]
from Erp.POHeader as POHeader
inner join Erp.PODetail as PODetail on
POHeader.Company = PODetail.Company
and POHeader.PONum = PODetail.PONUM
inner join Erp.PORel as PORel on
PODetail.Company = PORel.Company
and PODetail.PONUM = PORel.PONum
and PODetail.POLine = PORel.POLine
inner join Erp.JobHead as JobHead on
PORel.Company = JobHead.Company
and PORel.JobNum = JobHead.JobNum) as PlannerID
right outer join Erp.POHeader as POHeader1 on
POHeader1.PONum = PlannerID.POHeader_PONum
POHeader.Company = PODetail.Company
and POHeader.PONum = PODetail.PONUM
inner join Erp.PORel as PORel on
PODetail.Company = PORel.Company
and PODetail.PONUM = PORel.PONum
and PODetail.POLine = PORel.POLine
inner join Erp.JobHead as JobHead on
PORel.Company = JobHead.Company
and PORel.JobNum = JobHead.JobNum) as PlannerID
right outer join Erp.POHeader as POHeader1 on
POHeader1.PONum = PlannerID.POHeader_PONum"
SQL-код, который я написал, чтобы вернуть PersonID, но мне нужно знать две вещи-
- Куда поместить этот подзапрос?
- Как вернуть значение из подзапроса в текстовом поле заголовка проекта, используя выражение?
Буду признателен, если смогу получить несколько предложений. Спасибо
Комментарии:
1. Лучший способ получить справку по stackoverflow — показать, что вы что-то пробовали. Вы пробовали писать SQL-запрос или какие-либо инструкции в SSRS? Вероятно, вы можете сделать то, о чем просите, проще в SQL, но логика возможна и в SSRS.
2. Привет, Стив, это запрос, который я написал 1. = Поиск (поля! ПОНум.Значение, поля! ПОНум.Значение, поля! JobNum.Value, «POHeader») Этот запрос возвращает номер задания (JobNum) после того, как он соответствует понуму, который сохранен в текстовом поле 2. =Поиск (ReportItems! Textbox14.Значение, поля! JobNum.value, Поля! PersonID.value, «POHeader») Этот запрос соответствует номеру задания и должен возвращать PersonID (руководитель проекта). Однако это не так. Возможно, я делаю здесь что-то не так.
3. Это не SQL-запрос.
4. Извините, это выражение, которое я ввел в текстовом поле, соответствует двум полям dataset 1 и dataset2 и возвращает третье значение и снова сопоставляет третье значение с полем i dataset 3. Теперь я определил проблему. Значение, которое я пытаюсь получить из набора данных 3, на самом деле не находится в наборе данных 3
5. У вас есть доступ для изменения SQL. Хотя вы можете объединить несколько наборов данных в SSRS, намного проще написать хороший оператор SQL, чем выполнять логику такого типа в SSRS? Если у вас есть SQL, опубликуйте его вместе с образцами данных.
Ответ №1:
SSRS использует наборы данных для получения данных из базы данных, и каждое поле в наборе данных может быть отображено в отчете. Чтобы добавить поле в набор данных, оно должно быть возвращено базовым запросом набора данных. Просмотрите свойства набора данных и посмотрите на запрос. Если оно имеет вид «выберите a, b, c из таблицы», добавьте нужное поле в список столбцов (a, b, c и т.д.). Если это хранимая процедура, найдите кого-нибудь, кто может отредактировать эту процедуру, чтобы включить ваше отсутствующее поле. Когда вы это сделаете, обновите список полей для набора данных. Теперь ваше новое поле должно быть доступно для использования в отчете. Конечно, если вы нарушили sql для набора данных, вам нужно будет найти кого-то, кто знает базовую базу данных, чтобы помочь вам.
Комментарии:
1. Привет, приятель, Это запрос, который я написал 1. = Поиск (поля! ПОНум.Значение, поля! ПОНум.Значение, поля! JobNum.Value, «POHeader») Этот запрос возвращает номер задания (JobNum) после того, как он соответствует понуму, который сохранен в текстовом поле 2. =Поиск (ReportItems! Textbox14.Значение, поля! JobNum.value, Поля! PersonID.value, «POHeader») Этот запрос соответствует номеру задания и должен возвращать PersonID (руководитель проекта). Однако это не так. Возможно, я делаю здесь что-то не так.
2. Привет @Programnik Я добавил SQL-запрос. Если вы можете взглянуть, это было бы для меня большой помощью. Спасибо, приятель
3. Привет @Programnik, я думаю, что ваше предложение правильное. Итак, я добавил подзапрос в базовый запрос к набору данных. Однако, я, вероятно, допустил там какую-то ошибку. Я не могу получить представление отчета сейчас.