2016-05-25 14 views
0

私はpowerpivotテーブルにウィンドウ関数を追加したいと思うかもしれませんが、私は...ウィンドウ関数に基づいてレコードを除外したいと思います。DAXへのSQL解析関数

私はこれに似たような問合せ(SQL Serverを)持っている:

Select Line_Number, 
     Suite_name, 
     Group_Name, 
     Revision, 
     Status 
FROM (
    select Line_Number, 
      Suite_Name, 
      Group_Name, 
      Revision, 
      Status, 
      Row_Number() OVER (Partition by Line_Number, Suite_Name, Group_Name order by Revision Desc) r 
    From TableA 
    ) t 
where t.r = 1 

このクエリは、Line_Numberあたりの最高のリビジョンの行を返しSuite_Name、およびGroup_Name

同じことをしたいが、Excel Power PivotのDAXを使用したい。

結果は行番号の数になりますが、選択された(スライサー)スイートおよびグループの数です。

すべての行を表形式のデータモデルに選択し、同様の機能を使用してレコードをフィルタリングし、適用されたスライサーごとに最新のリビジョンのみを保持することが目的です。

私がこれまで試した:CALCULATEを、FILTERTOPNRANKXGENERATE。それらのうちどれもに動的にを割り当てることができませんでした。

誰かがアプローチを提案できますか?

ありがとうございます!

+0

ありがとう@ gofr1!あなたがたぶん気づいたように、私は問題を作るのに問題があったようです。 – sliber

答えて

1

計算された列を使用して、以前の関数を使用して最大リビジョン値を見つけることができます。 リビジョンの範囲で動的フィルタを使用する場合は、この方法は機能しません。

calc_column01:=CALCULATE(max(myTable[revision]),filter(myTable,myTable[line_number]=EARLIER(myTable[line_number])&&myTable[suite_name]=earlier(myTable[suite_name])))

その後measure01追加:=CALCULATE(VALUES(myTable[status]),filter(ALLSELECTED(myTable),myTable[revision]=max(myTable[calc_column01])))

powerpivot window

sampledateをとのPowerPivotの結果:

result

+0

あなたの提案は、ユーザーがスライサーを選択できない場合にのみ機能します。このプロセスは次のようなものです。あなたのスライサーが何であるかを教えてください。そして、スライサーの最新のリビジョンを入手してください。 私はこれのための解決策を見つけました(しかし、7mレコードでかなり遅く動作します - 下記の私の答えを見てください) – sliber

0

私が物事が右やったことが表示されますが、このI realiのソリューションを検討しながらzedは、時には細胞参照が仕事をしないので、私は3つのステップで作業しなければならなかった。 さらに、私の質問の複雑さを減らすために、私は多かれ少なかれ多くのテーブルを持っているとは言いませんでした。 いくつかのコード例:残念ながら、これは動作しませんでした

Total Lines:=CALCULATE(COUNTROWS(TABLE A), 'TABLE B', 'TABLE C', FILTER(ALLSELECTED(TABLE A[REV]), [REV] = Last Rev)) 

ので、私はにコードを更新する必要がありました:今

Last rev:=CALCULATE(MAX(REV), 'TABLE B', 'TABLE C') 

私は最初のものを実行しようとしました、これは、コードは次のように見えた方法ですこれは:

Total Lines:=CALCULATE(COUNT('TABLE A'[REV]), 'TABLE B', 'TABLE C', FILTER(ALL('TABLE A'[REV]), [REV] = CALCULATE(MAX(REV), 'TABLE B', 'TABLE C'))) 

その後、私が実際にやったフィルターは本当にありました。 はこれが行わ取得した後、私はまだ集計で正しく対処しなければならなかったので、私はそうでない場合、私は唯一の「1」を取得し、別の合計式で合計行の対策をラップしていた:'Table B''Table C'について Total:=SUMX(VALUES('Table A'[LINE_NUMBER]),[Total])

さらに詳しい情報:これらは多対多のテーブルです。'Table B'は中間テーブルで、'Table C'はディメンションテーブル自体です