2016-03-18 3 views
0

Я работаю с CRM онлайн. Вот почему я использую fetchXML. Это моя выборка:Правильное выражение с IIF не работает

`<fetch aggregate="true" distinct="false" no-lock="false" mapping="logical"> 
<entity name="lead" > 
<attribute name="fullname" alias="lead_name" groupby="true" /> 
<attribute name="new_bpf_stage" alias="lead_stage" groupby="true" /> 
<attribute name="new_substep" alias="lead_substep" groupby="true" /> 
<attribute name="leadid" alias="lead_id" groupby="true" /> 
<filter type="and" > 
    <condition attribute="createdon" operator="ge" value="@PeriodBeginning" /> 
    <condition attribute="createdon" operator="le" value="@PeriodEnding" /> 
</filter> 
<link-entity name="new_duration_life_cycle" from="new_lead_duration_life_cycleid" to="leadid" link-type="outer" > 
    <attribute name="new_duration" alias="current_duration" groupby="true" /> 
    <attribute name="new_active" alias="current_is_active" groupby="true" /> 
    <attribute name="new_transition_date" alias="current_transition_date" aggregate="max" /> 
    <filter type="and" > 
    <condition attribute="new_active" operator="eq" value="1" /> 
    </filter> 
</link-entity> 
<link-entity name="new_duration_life_cycle" from="new_lead_duration_life_cycleid" to="leadid" link-type="outer"> 
    <attribute name="new_duration" alias="duration_sum" aggregate="sum" /> 
</link-entity> 
</entity> 

` Это код выражение:

=IIF(Fields!current_is_activeValue.Value = "True", 
DATEDIFF ("d", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now()) + 
IIF(DATEDIFF ("h", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now()) Mod 24 > 8, 
    8, 
    (DATEDIFF ("h", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now())) Mod 24)/8 + 
IIF(Fields!current_duration.Value = "", 
    0, 
    CDbl(Replace(Fields!current_duration.Value,",","."))) 
, 
Fields!current_duration.Value) 

В этом коде я проверить некоторые атрибуты, и если его значение верно рассчитать значение поля. Но если некоторые значения не существуют (это в случае current_is_activeValue.Value = ""), в соответствующей ячейке будет отображаться ошибка. Но ошибки не должно быть: должно отображать поля: current_duration.Value, которое должно быть «". Похоже, что выражение все равно вычисляет случаи IIF. Неужели кто-нибудь беспокоится?

+0

' "г" и' "ч" 'не действительны' интервалы DATEDIFF' в SSRS вы можете использовать '' DAY' и HOUR' или 'DateInterval.Day' и 'DateInterval.Hour'. См. Документацию [здесь] (https://technet.microsoft.com/en-us/library/aa337092 (v = sql.100) .aspx). Кроме того, я не уверен, что периоды в строке формата разрешены. Возможно, вам придется изменить «MM.dd.yyyy hh: mm: ss» 'to' 'MM/dd/yyyy hh: mm: ss" или '" MM-dd-yyyy hh: mm: ss "'. – Kidiskidvogingogin

ответ

0

Пробовал разбивая ваше выражение для визуализации IFFS:

First IIF, если условие

=IIF(Fields!current_is_activeValue.Value = "True", 

Весь этот раздел является ТОГДА пункт для первого IIF. Как вы можете видеть, все три значения добавлены, и поэтому будут вычислены два интервала IIF внутри этого предложения.

DATEDIFF ("d", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now()) 
+ 
IIF(DATEDIFF ("h", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now()) Mod 24 > 8, 
8, 
(DATEDIFF ("h", CDate(Format(Fields!current_transition_dateValue.Value, "MM.dd.yyyy hh:mm:ss")), Now())) Mod 24)/8 
+ 
IIF(Fields!current_duration.Value = "", 0,  CDbl(Replace(Fields!current_duration.Value,",","."))) 

остальное для первого IIF

, 
Fields!current_duration.Value) 

Он вычислительное как КИРП. Вам может потребоваться отредактировать выражение.

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