2017-12-22 34 views
1

나는 그것에서이 가진 SSRS 식을 가지고 :SSRS의 표현 - # 오류 명백하게 올바른 표현에

=IIF(
    Fields!CUT.Value.ToString().Length > 1 
    ,IIF(
     Fields!CUT.Value.ToString().Contains(","), 
     Fields!CUT.Value.ToString().Substring(0, Fields!CUT.Value.ToString().IndexOf(",")), 
     Fields!CUT.Value.ToString() 
    ) 
    ,"" 
) 

번역 : 필드가 ,을 포함
경우에, 저에게 필드의 substring를 가져옵니다 첫 번째 위치에서 ,까지의 위치. 필드에 ,이 포함되어 있지 않으면 전체 필드를 입력하십시오.

Probelm :
내가 NO 쉼표가없는 모든 페이지에 #Error를 얻을. COMMA가 있으면 예상대로 작동합니다. 필드 중 하나 인 값은 4입니다. 다른 시나리오에서는 값이 17/64" Corrugated입니다. 나는 그 둘 모두에 대해 오류가 발생합니다.

가 나는 시도했다 :
내가 몇 가지 다른 방법 시도했다 : 나는에 새 필드를 추가

=IIF(
    IsNothing(Fields!CUT.Value) 
    ,"" 
    ,IIF(
     Fields!CUT.Value LIKE "*,*", 
     Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
     Fields!CUT.Value 
    ) 
) 
    1. 사용 LIKE 대신 Contains을 내 을 XXXX으로 대체 한 dataset입니다. SSRS는 문자열의 일부로 ,에 대해 이야기하고 있다는 것을 이해하지 못했을 것입니다. 그런 다음 쿼리를 변경하여 XXXX이 있는지 확인했습니다. 여전히 동일 함 #Error

    2. 파일을 삭제하고 .data 파일을 삭제하고 프로젝트를 지우고 프로젝트를 다시 작성하십시오. 왜냐하면, 이것은 분명히 부정확하지 않습니다. 그래서 나는 보고서의 최신 버전을보고 있지 않을 수도 있다고 생각했습니다.

    아무것도 보이지 않습니다. 나는 정말로 나쁜 것을하고있는 것에 가깝다! 이 일은 나를 미치게 만든다.

    질문 :

    1. 누구든지 내 표현 중 하나 잘못 아무것도 볼?
    2. 달성하려는 작업을 수행하는 더 좋은 방법이 있습니까? ,이있는 경우 , 앞에 모든 것을 제공하십시오. 그렇지 않다면, 모든 것을주세요.

    편집 1 : 다른 필드에, 나는이 매우 비슷한 일을하고, 협조 할
    하십시오 ,에있을 경우,

    IIF(
        IsNothing(Fields!CUT.Value) 
        ,"" 
        ,IIF(
         Fields!CUT.Value LIKE "*,*" 
         ," | Length: " & Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
         ,"" 
        ) 
    ) 
    

    이것이하고있는 것은을 그 동일한 분야, , 후에 나에게 모든 것을 가져다가 | Length:에 붙이십시오. ,이 없으면 빈 공간 "" 만 표시하면됩니다. 이것은 완벽하게 작동합니다. ,이 있고 ,이없는 상황.그래서 나는 MS가 SSRS를 사용하여 나를 미치게 만들었다 고 결론을 내렸다.

  • +0

    간단한, 그래서 문제가 가장 가능성이 당신의 진정한 섹션에있다 :'필드 CUT를! .Value.ToString(). 하위 문자열 (0, 필드! CUT.Value.ToString(). IndexOf (","))'. 쉼표가 없으면이 표현식은 쉼표의 위치를 ​​찾을 수 없습니다. 그러나'IndexOf' 함수가 어떻게 동작하는지 정확히 모르겠습니다. 그리고 나는 이것을 순간적으로 테스트 할 수단이 없으므로 이것을 단지 주석으로 남겨 두었습니다. –

    답변

    1

    SWITCH를 사용하여 쉼표없이 테스트 할 수 있지만 문자열의 첫 번째 부분 만 쉼표로 가져 오는 것이 더 쉬운 경우를 가정하면 훨씬 쉬운 방법이 있습니다.

    이 함수는 단지 split 함수를 사용하고 첫 번째 요소를 사용합니다.

    =(Split(Fields!CUT.Value, ",")).GetValue(0) 
    

    니스 및 SSRS에 관계없이 첫 번째 문이 참인지 거짓인지의`IIF`의 모든 부분을 평가 :

    +0

    감사합니다. 나는 '스위치'사용을 생각하지 않았다. 그것은 분명 더 쉬웠을 것입니다. 하지만 이미 SSRS에서 걱정할 필요가 없도록 두 개의 다른 필드에서 결과를 반환하도록 저장 프로 시저를 변경했습니다. 나중에 참조 할 수 있도록 너의 것을 시도 할 것이다. 감사합니다 –

    +0

    나는 이것을 사용하지 않았음에도 불구하고 답을 표시했기 때문에 이것은 분명히 효과적입니다. 'Switch'와'Split' 모두 작동합니다. 하지만 이미 스토어드 프로 시저를 크게 변경했습니다. 그래서 나는 그걸로 갈거야. 고마워. –