Можно ли добавить имя атрибута условия через входной параметр в отчет fetch xml ssrs?

У меня есть требование, когда пользователь может выбрать любой из двух типов дат: 1. Дата аварии 2. Дата создания из раскрывающегося списка. На основании этого Пользователь заполнит диапазон дат. Моя проблема в том, как я могу этого добиться. Для этого у меня есть два разных поля в сущности. я пробовал это

 <filter type="and">
      <condition attribute="@DateType" operator="on-or-after" value="@FromDate" />
      <condition attribute="@DateType" operator="on-or-before" value="@ToDate"   />

    </filter>

Но я не думаю, что это работает. Так есть ли другой способ добиться этого. Заранее спасибо.


person Bipin Bhandari    schedule 14.03.2017    source источник


Ответы (1)


Я не знаю простого способа добиться этого из-за того, что это fetch xml, а язык весьма ограничен. Но для этого есть небольшой «хак».

Во-первых, я предполагаю, что значение value "@DateType" - это имя атрибута, по которому вы хотите отфильтровать диапазон дат.

Теперь, чтобы добиться того, чего вы хотите, вам в основном нужно перехватить предварительную фильтрацию с помощью собственного параметра. Удалите фильтр из основного запроса и включите предварительную фильтрацию. Что-то вроде следующего (в моем случае я тестировал его на свинце):

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="lead" enableprefiltering="true" prefilterparametername="FilterParam">
    <attribute name="fullname" />
    <attribute name="createdon" />
    <attribute name="modifiedon" />
    <attribute name="statuscode" />
    <attribute name="subject" />
    <attribute name="ownerid" />
    <attribute name="leadid" />
    <order attribute="createdon" descending="true" />
  </entity>
</fetch>

Важной частью является enableprefiltering="true" prefilterparametername="FilterParam" и указанный параметр предварительной фильтрации FilterParam (вы можете назвать его как хотите).

Теперь это должно было автоматически создать для вас новый параметр с именем FilterParam. Откройте свойства этого параметра и отредактируйте значение по умолчанию, чтобы вместо этого прочитать это:

= "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + 
"<entity name='lead'><all-attributes/>" + 
"<filter type='and'>" + 
"<condition attribute='" + Parameters!DateType.Value + "' operator='on-or-after' value='" + Format(Parameters!DateFrom.Value, "yyyy-MM-dd") + "' />" +
"<condition attribute='" + Parameters!DateType.Value + "' operator='on-or-before' value='" + Format(Parameters!DateTo.Value, "yyyy-MM-dd") + "' />" +
"</filter></entity></fetch>"

По сути, вы используете выражение в параметре для создания строки FetchXML для передачи в качестве предварительного фильтра. Это использует параметры даты для создания правильного фильтра.

Теперь запустите его, и он должен фильтроваться по двум разным датам.

person Conor Gallagher    schedule 14.03.2017
comment
Спасибо! Согласно ответу, который вы дали, я понял, что мы предварительно фильтруем запись, но это не так. Пользователь хочет выбрать любую из двух дат: дату аварии или дату создания. Но не предварительно отфильтрованная запись. - person Bipin Bhandari; 20.03.2017
comment
Не совсем то, что я говорю. Я говорю, что вы можете использовать те же параметры предварительной фильтрации, чтобы добиться того, что вы просили. По характеру вашего запроса я предположил, что в настоящее время вы не выполняете предварительную фильтрацию. - person Conor Gallagher; 20.03.2017