2016-07-06 2 views
2

SSAS 테이블 프로젝트의 자동화 된 테스트 도구에 대한 연구를하고 있습니다. NBi를 발견하고 정말 멋지다고 생각했습니다. 나는 그것을 설정하고 몇 가지 기본적인 테스트를 성공적으로 수행했다. 그러나 dax 계산을 시도 할 때 "함수를 찾을 수 없음"이라고 표시됩니다 (스크린 샷 참조). 그것은 SUM을 지원하지 않는 것처럼 들리지만, SUM이 그것이 작동해야한다고 상상할 수있는 기본 함수라는 점을 감안할 때. 필자는이 도구를 처음 사용하기 때문에 잘못된 것을 수행했는지 또는 단순히 오류가 무엇인지 말하고 싶습니다 ... (지원되지 않는 함수).NBi로 DAX 계산 테스트

나는 돌아가서 NBi 문서를 검토했고 사용 가능한 모든 표현에 대해 NCAL.dll을 확인했다. 불행히도, 나는 그 dll 파일의 읽을 수있는 버전을 열 수 없습니다. 어떤 도움을 주셔서 감사합니다. 여기

는 I 테스트하고자하는 수식이다

= SUMX (FILTER (MyTable에, AND (MyTable에 [날짜 = 이전 (MyTable에 [일자])을 MyTable [계정] = 이전 (MyTable에 [계정])))으로 MYTABLE [양])

enter image description here

XML 코드 (nbits)는

<test name="My second test: Calculated column compared to DAX formula"> 
    <system-under-test> 
    <execution> 
    <query connectionString="Provider=MSOLAP.7;Data Source..."> 
    <![CDATA[  
    EVALUATE 
    SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], MyTable[CalculatedAmount]) 
    ]]> 
    </query> 
    </execution> 
    </system-under-test> 
    <assert> 
    <evaluate-rows> 
     <variable column-index="0">Date</variable> 
     <variable column-index="1">Account</variable> 
     <variable column-index="2">Amount</variable> 
     <variable column-index="3">CalculatedAmount</variable> 
     <expression column-index="3" type="numeric" tolerance="0.01"> = SUMX(FILTER(MyTable, AND(MyTable[Date] = EARLIER(MyTable[Date]), MyTable[Account] = EARLIER(MyTable[Account]))), MyTable[Amount])</expression> 
    </evaluate-rows> 
    </assert> 
</test> 
+0

그냥 설명해주세요 - 간단한 SUM과 실제 SUMX를 전환합니다. – NKD

+0

테스트의 xml을 게시 할 수 있습니까? 그리고이 시험에서 당신이 무엇을 시험하려고하는지 일반 영어로 설명하십시오. "테스트하고 싶은 수식"은 무엇을 의미합니까 ... 프로젝트에서 수식이 구현되었거나 테스트에서 어설 션을 수행하기 위해 지정하려고하는 수식입니까? –

+0

방금 ​​요청에 따라 XML을 게시했습니다. 테스트하고 싶은 것은 간단합니다. 첫 번째 결과 집합에서 네 번째 열 (CalculatedAmount)을 계산 열로 사용하여 테이블 형식 모델에서 4 열을 선택합니다. 이제 두 번째 결과 집합에서 CalculatedAmount 열에 DAX 식을 사용하는 것과 동일한 데이터를 비교하고 있습니다. 이것은 첫 번째 결과 집합에 대한 계산 된 금액을 얻기 위해 표 형식 모델에 입력 한 표현식과 같습니다. 이 도구가 DAX 식을 지원할 수 있는지 확인하고 싶습니다. 그렇다면 내 테스트가 통과해야합니다. 아직도 이해가되지 않으면 알려주세요. – NKD

답변

2

NBI가 지원 파일 쿼리 태그에서 DAX 쿼리를 평가하지만 표현 태그에서는 평가하지 않습니다. Expression 및 evaluate-rows 태그는 두 개의 쿼리를 비교하도록 설계되지 않았습니다. 이를 수행하려면 두 개의 쿼리간에 어설 션 equalTo를 사용하도록 테스트를 변경하십시오. 그것은 더 쉬울 것이고 일할 것이다.

나는 더 나은 질문은 내가 측정 및 다른 개발자가 실수로 테이블 형식 모델을 설계 할 때 내가 입력 한 계산/표현을 변경하지 않는 것을 보장 기간에 계산 된 열을 어떻게 테스트합니까 것 같아요?

개념적, 논리적 및 기술적 인 세 가지 수준으로 답변 해 드리겠습니다.

개념적 수준에서 테스트가 잘못되었습니다. 테스트 및 구현중인 시스템에서 동일한 구현을 사용해서는 안됩니다. 이것은 NBi 나 모든 프레임 워크가 아니라 모든 자동화 된 테스트에 특유한 것입니다. 테스트의 역할은 누군가가 무언가를 변경하지 않고 무언가가 올바른 결과를 제공하는지 확인하는 것이 아닙니다. 이슈를 자체와 비교하면 구현이 잘못되어도 항상 녹색 테스트가 수행됩니다. 이 경우 구체적인 정적 결과를 사용하여 어설 션을 변경해야하며 그렇지 않으면 SQL 문을 만들어 데이터베이스를 계산해야하거나 MDX에서 다른 쿼리를 찾아야 동일한 결과가 발생합니다. 논리 수준 다음 문장에서

여기에 정확하지 않은 시험에 내가 원하는 공식이다 :

당신은 당신의 system-under-testassert이 공식을 정의하지했습니다. 그것은 당신이 테스트하고있는 것이 아니라 당신의 참조 (당신이 100 % 정확하다고 확신하는 것)라는 것을 의미합니다. 테스트중인 것은 쿼리 EVALUATE SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], MyTable[CalculatedAmount])입니다.

기술 수준에서는 evaluate-rows를 사용하는 것이 올바른 옵션이 아닙니다. 이 어설 션은 함수 나 쿼리가 아니라 행의 변수 (DAX, SQL 없음 ...)를 기반으로하는 표현식을 필요로합니다.EARLIER의 사용은 분명하지 않을 수 있습니다. 내가 분명히 DAX의 specilist 아니에요 나는 위의 쿼리보기의 문법 지점에서 유효 확실하지 않다 :

<assert> 
    <equalTo> 
    <column index="0" role="key" type="dateTime"/> 
    <column index="1" role="key" type="numeric"/> 
    <column index="2" role="value" type="numeric"/> 
    <column index="3" role="value" type="numeric" tolerance="0.01"/> 
    <query> 
     EVALUATE SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], SUMX(FILTER(MyTable, AND(MyTable[Date] = EARLIER(MyTable[Date]), MyTable[Account] = EARLIER(MyTable[Account]))), MyTable[Amount]) 
    </query> 
    </equalTo> 
</assert> 

PS : 귀하의 경우에, 당신은 아마 뭔가를 두 개의 쿼리를 비교해야합니다.

+0

mm ...하지만 내가 가지고있는 DAX 식은 쿼리가 아닙니다. SSMS를 열고 Sumx를 실행하면 ... 작동하지 않습니다. – NKD

+0

다른 개발자가 테이블 형식 모델을 디자인 할 때 실수로 계산/표현식을 변경하지 않도록하기 위해 측정 값과 계산 된 열을 어떻게 테스트해야합니까? – NKD

+0

" NKD