2016-07-06 14 views
2

SSAS Tabularプロジェクトの自動テストツールに関するいくつかの調査を行っています。私はNBiを見つけ、それが本当にクールだと思った。私はそれを設定しようとし、いくつかの基本的なテストを成功裡に実行しました。しかし、ダックス計算を試してみると、「機能が見つかりません」と表示されます(スクリーンショットを参照)。 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)を計算列として、表形式モデルから4列を選択します。今、2番目の結果セットでは、同じデータを、CalculatedAmountカラムにDAX式を使用するという例外と比較しています。これは、表形式のモデルで入力したのと同じ式で、最初の結果セットの計算された金額を取得します。このツールがDAXの式をサポートできるかどうかを確認したい。もしそうなら、私のテストは合格するはずです。まだそれが理にかなっていないかどうか私に教えてください。 – NKD

答えて

2

NBIがサポートするファイルクエリタグのDAXクエリを評価しますが、式タグは評価しません。 Expressionタグとevaluate-rowsタグは、2つのクエリを比較するように設計されていません。これを実現するには、2つのクエリ間でアサーションequalToを使用するようにテストを変更します。それはより簡単になり、うまくいくでしょう。

私はより良い質問はどのように私は別の開発者が誤って は、表形式のモデルを設計するとき、私は入力された計算/式を変更しませ ないことを保証する期間中に測定し、 計算列をテストするんだろうと思いますか?

私は、概念的、論理的、および技術的の3つのレベルで答えます。

概念レベルでは、テストは間違っています。アサーションとテスト対象システムで同じ実装を使用しないでください。これは、NBiやあらゆるフレームワークではなく、すべての自動テストに特有のものです。テストの役割は、誰かが何かを変えないようにすることではなく、何かが正しい結果を出すことを保証することではありません。アーティファクトを自分と比較すると、実装が間違っていても常に緑色のテストになります。この場合、具体的な静的結果を使用してアサーションを変更する必要があります。または、SQL文を作成してデータベースを計算する必要があるか、MDXで別のクエリを検索して同じ結果を得る必要があります。

あなたのsystem-under-testであなたのassertずに、この式を定義した:

論理レベルでは、次の文は、ここ

正しくありませんが、私がテストしたい式です。それはあなたがテストしているものではないが、それはあなたの参照(それが正しいと確信している何か)であることを意味します。テストしているのはクエリです。

技術的なレベルでは、evaluate-rowsを使用することは正しいオプションではありません。このアサーションでは、関数またはクエリが行の変数(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:あなたのケースでは、あなたはおそらく何かを2つのクエリを比較しなければなりません、私ははっきりとDAXのspecilistないと私は、上記のクエリは、ビューの構文の観点から有効であるか分かりません。

+0

mm ...しかし、私が持っているDAX式は、クエリthoではありません。私がSSMSを開き、Sumxを実行すると...うまくいきません。 – NKD

+0

他の開発者がTabularモデルを設計するときに入力した計算式を誤って変更しないように、測定値と計算列をどのようにテストするのがよいでしょうか? – NKD

+0

私は、この行 " NKD

関連する問題