2017-04-03 4 views
0

私は何かを達成しようとしていますが、それを行う方法はわかりません。他の列の多くの値に条件付きの列の合計

私はそうのような従業員の時間のエントリを表し寸法(表TEntryと呼ばれる)があります。

Id | EmployeeId | EntryDT | TimeInMinutes | PriceAgreementId 
------ | ---------- | ---------- | ------------- | ---------------- 
    1 | 1   | 2017-03-20 | 100   | 1 
    2 | 1   | 2017-03-31 | 50   | null 
    3 | 2   | 2017-03-21 | 100   | 1 
    4 | 2   | 2017-03-23 | 125   | 2 
    5 | 3   | 2017-03-15 | 90   | null 
    6 | 3   | 2017-03-25 | 60   | 1 

を時には彼らは「PriceAgreements」上で動作し、時には彼らはそうではありません。

私のダッシュボードでは、私はEmployeeIdによってテーブルTEntryをグループ化し、TimeInMinutesを合計するテーブルを持っています。私はまた、EntryDT用スライサーを持っている:

EmployeeId | TimeInMinutes 
-------------- | ------------- 
    1   | 150 
    2   | 225 
    3   | 150 

は、私が表現する2つの新しい列を作成する必要があります。

  1. 従業員がそうEMPLOYEEID#1、合計のすべてのPriceAgreements に取り組んできました合計TimeInMinutes
  2. 合計TimeInMinutes ALL Employeesは機能していますが、現在のEmployee(現在の行)が処理したPriceAgreementsに対してのみ機能しています。

表は、(括弧内PriceAgreementIdsなし)次のようになります。

EmployeeId | TimeInMinutes | TimeInMinutes on PriceAgreements | TimeInMinutes on PriceAgreements ALL other EmployeeIds 
-------------- | ------------- | -------------------------------- | ------------------------------------------------------ 
    1   | 150   | 100 (PriceAgreementId=1)   | 260 (PriceAgreementId=1) 
    2   | 225   | 225 (PriceAgreementId=1 and 2) | 385 (PriceAgreementId=1 and 2) 
    3   | 150   | 150 (PriceAgreementId=1)   | 260 (PriceAgreementId=1) 

コラム「PriceAgreementsのTimeInMinutes」非常に簡単ですが、他のものを、私は解決策を見つけることができません...

は、私が始めたこのDAX式を持っているが、それは完全ではありません。

CALCULATE(SUM(TEntry[TimeInMinutes]), NOT ISBLANK(TEntry[PriceAgreementId]), ALL(TEmployee)) 

TEmployeeディメンションLINですメインTEntryテーブルにkedします。

ご協力いただければ幸いです。 は、私が(a)は、それはあなた(または他の誰か)を取得する可能性があるため、その答えとして、これを上投げ右方向に行くと、(b)場合には、従業員だけで今まで持っているであろうことが保証だよあなたに

答えて

1

ありがとうございました2つの価格契約に対応するタイムエントリがあれば、これはうまくいくでしょう - これはあなたの場合はそうではありませんが、同様のことを達成しようとしている他の人にとってはそうかもしれません。

Measure = 
CALCULATE (
SUM (TEntry[TimeInMinutes]), 
    FILTER (
    ALL (TEntry), 
    (
     TEntry[PriceAgreementID] = MIN (TEntry[PriceAgreementID]) 
      || TEntry[PriceAgreementID] = MAX (TEntry[PriceAgreementID]) 
    ) 
     && TEntry[PriceAgreementID] <> BLANK() 
) 
) 

この尺度は言っている:PriceAgreementIDは、(現在の行のコンテキストで)最小または最大PriceAgreementIDのいずれかと一致し、PriceAgreementIDが空白でないTEntryテーブルのすべてのレコードのSUM TimeInMinutesを。

この回答の致命的な欠陥はMINとMAXです。 2つのPriceAgreementIDs(1 & 2)を持つ従業員ID 2の場合、MINはPriceAgreementID 1の分を計算し、MAXはPriceAgreementID 2の分を計算します。ただし、2つ以上のPriceAgreements ...私はそれをする方法を知らない。

それは、(従業員一人当たり2つの価格協定の最大があるので)にもかかわらず、あなたの質問のサンプルデータでの作業を行います。

Result using a measure on the sample data above - which an employee is limited to 2 price agreements

一般的に私はこのような問題に直面していたときに解決するのは簡単ではありませんが、私は自分のデータモデルを考え、それができるだけ星型スキーマに適合していることを確認します。

あなたの場合、従業員は複数の価格協定を結ぶことができ、価格協定は多くの従業員に関連付けることができます。それは私には多対多の関係を示唆しています。多対多の関係や、基礎となる表の再構築(例:ブリッジテーブルの組み込み)が必要な答えに近づくのに役立つかどうかを強くお勧めします。

良い出発点は:https://www.sqlbi.com/articles/many-to-many-relationships-in-power-bi-and-excel-2016/

+1

これは私の状況には当てはまりません。 私はPowerBIを初めて使っているので、あなたの答えとあなたが共有したリンクをまだ学んでいます。それではありがとうございます。 私の問題として、私はテーブル "TEmployee.It"を表すビューでSQLで直接 "Measure"カラムを計算することになりました。これはずっと簡単でした。 ありがとうございました! – vincenormand

関連する問題