2016-07-06 64 views
2

我正在爲我們的SSAS Tabular項目進行一些自動化測試工具的研究。我發現NBi並認爲它非常酷。我試圖設置它併成功地進行了一些基本的測試。但是,當我試圖測試dax計算時,它會顯示「未找到函數」(請參見截圖)。這聽起來像它不支持SUM,但鑑於SUM是一個基本的功能,我會想象它應該工作。由於我是這個工具的新手,我想仔細檢查一下,如果我做錯了什麼,或者錯誤是這樣說的......(不支持的功能)。使用NBi測試DAX計算

我回去和審查NBI文件,並將其提到看看他們NCAL.dll所有可用的表達。不幸的是,我無法打開該dll文件的可讀版本。任何幫助表示讚賞。

這裏是我想測試下式:

= SUMX(FILTER(MyTable的,AND(MyTable的[日期] = EARLIER(MyTable的[日期]),MyTable的[部門] = EARLIER(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。我想測試的很簡單。在第一個結果集中,我從表格模型中選擇4列,第四列(CalculatedAmount)作爲計算列。現在,在第二個結果集中,我將相同的數據與我爲CalculatedAmount列使用DAX表達式的異常進行比較。這與我在表格模型中輸入以獲得第一個結果集的計算量相同的表達式。我想看看這個工具是否可以支持我的DAX表達式。如果是這樣,我的測試應該通過。讓我知道它是否仍然沒有意義。 – NKD

回答

2

NBI支持DAX查詢在查詢標記中的評估,但不在表達式標記中。表達式和評估行標記不用於比較兩個查詢。要做到這一點,請將您的測試更改爲在兩個查詢之間使用assertion equalTo。它會更容易,並會工作。

我想一個更好的問題將如何測試量度,並確保其他開發商不 意外改變時 設計表格模型我進入計算/表達任期 計算列?概念,邏輯和技術:

我會在三個層面上回答。

在概念層面,你的測試是錯誤的:你永遠不應該使用相同的實現你的主張,並在您的系統下測試。這對NBi或任何框架都沒有具體規定,但對所有自動化測試都是如此。測試的角色並不能確保某人不改變某些東西,而是確保某些東西能夠產生正確的結果。即使您的實施錯誤,將工件與自身比較也會導致綠色測試。在這種情況下,您必須使用具體的靜態結果更改斷言,或者您需要創建一個sql語句,以便對數據庫進行相同的計算,或者在MDX中查找另一個查詢,從而得到相同的結果。

在邏輯層下面的句子是不正確的

這裏是一個測試,我希望公式:

你已經在你的system-under-testassert定義這個公式,而不是。這意味着這不是你正在測試的內容,而是你的參考(你100%確定它是正確的)。你正在測試的是查詢EVALUATE SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], MyTable[CalculatedAmount])

在技術層面上,使用評價,行是n工作正確的選項。這個斷言並不期望函數或查詢,而是基於行變量的表達式(無DAX,無SQL,...)。EARLIER的使用是一個明確的信號,它不可能。在你的情況,你可能要比較兩個查詢的東西爲:

<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:我顯然不是DAX的specilist,我不知道上面的查詢是從一個語法點有效。

+0

毫米......但我所擁有的DAX表達式並不是查詢壽命。如果我打開SSMS並運行Sumx,它將無法工作。 – NKD

+0

我想一個更好的問題是如何測試度量和計算列,以確保另一個開發人員在設計Tabular模型時不會意外更改我輸入的計算/表達式? – NKD

+0

我設法通過刪除此行「 CalculatedAmount」來修復原始XML發佈的問題。測試通過。但考慮到你提供的答案,我可能不再需要,除非我想驗證我的DAX語法而不是「測試」。感謝您指點我正確的方向考慮正確地使用靜態數據或sql等效查詢進行測試。 – NKD