2017-12-03 27 views
0

次の分析のヒントを参考に誰かが私を助けてくれることを願っています。生徒はいくつかのコース(登録、参加、助成、...)のためにいくつかのアクションを行うことができますし、逆もあります - 最新のアクションをキャンセルします。 最初のメトリックは、2つの日付の間にシステムで発生したすべてのアクションをカウントすることです。これらはフィルタ/スライサーのように公開されます。 いくつかのサンプルデータ:カウントと別個のカウント測定(または計算された列)のダックスコード

person-id,person-name,course-name,event,event-rank,startDT,stopDT 
11, John, CS101, enrol,1,2000-01-01,2000-03-31 
11, John, CS101, grant,2,2000-04-01,2000-04-30 
11, John, CS101, cancel,3,2000-04-01,2000-04-30 
11, John, PHIL, enrol, 1, 2000-02-01,2000-03-31 
11, John, PHIL, grant, 2, 2000-04-01,2000-04-30 

データセット(DS)は、上記と私はカウントメトリックの次のコードを追加しました:

 evaluate 
sumx(
    addcolumns(ds 
     ,"z+", if([event] <> "cancel",1,0) 
     ,"z-", if([event] = "cancel",-1,0) 
     ) 
    ,[z+] + [z-]) 
    } 

メトリックが表示されるはず:3つのサブスクリプション(ジョン-CS101を= 1、John-PHIL = 2)。

他にもいくつかのルールがありますが、DAXコードに追加する方法はわかりません。キャンセル日は上記のアクション(キャンセル)と同じで、キャンセルアクションのランク=ノンキャンセル-cancel-action + 1

また、個別の生徒とコースの番号、複合キーを追加する必要があります。これをコードに追加するにはどうしたらいいですか?

よろしく、 Q

答えて

0

(集計、rankxを経由して)これは技術的な答えはありませんが、勧告のより。

あなたの挑戦のように聞こえるのは、あなたが取り消す可能性がある行動であるということです。アクションがキャンセルされたかどうかを決定する特定のロジックがあります(つまり、キャンセルは直後の行でなければならず、日付は一致する必要があります)。

あなたの特定の質問には答えられないが、DAXに取り消しロジックを置くのではなく、データモデルを調整することをお勧めします。

たとえば、後でキャンセルされる行をフラグするデータモデルに列を追加できる場合、DAXはすべてそのフラグをチェックして、アクションがキャンセルされたかどうかを確認します。 CALCULATEステートメント。イベントがキャンセルされたかどうかを判断するために多くのロジックを持つ必要はありません。 SUMXの必要性を完全に排除します。SUMXは行ごとに動作するため、多くの行を扱うときに時間がかかることがあります。

アクションがキャンセルされたかどうかのロジックは、ソースシステム(SQLやExcelの計算カラムなど)やETL(Power BIのクエリエディタなど)に移動するためのロジックです。タスク。ロジックは1回適用され、その後、メジャーを使用するたびにロジックを適用する必要はなく、すべてのメジャーのデータモデルに存在します。

これはあなたの論理的な質問を解決するのに役立つわけではないが、私がこの勧告を行う理由は、DAXは根本的に巨大な電卓であるということだ。それは物事を追加します。フィルタには優れていますが(いくつかのものを追加しますが他のものは追加しません)、すべてが列にまとめられたりカウントされたりするときに最も効果的です。一度それを超えたら(たとえば、現在の行について何かを調整するために下の行を見たい場合)、DAXは非常に複雑になる(遅くなる)一方で、ソースシステムやクエリエディタは、そのような要求はより容易になる。

+0

こんにちはレオナード、私のポストに追加されたノートのためにありがとう。はい、私はどこに必要なロジックを追加するのに最適な場所について同意します。よろしくお願いします。 –

関連する問題