2017-04-03 12 views
0

Ich versuche etwas zu erreichen, weiß aber nicht, wie ich es machen soll.SUMME der Spalte bedingt durch viele Werte einer anderen Spalte

Ich habe eine Dimension (Tabelle genannt TEntry), die Zeiteinträge für die Mitarbeiter wie so darstellt:

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 

Manchmal auf „PriceAgreements“ sie arbeiten, und manchmal nicht sie tun.

In meinem Dashboard habe ich eine Tabelle, die die Tabelle TEntry nach EmployeeId gruppiert und Summiert die TimeInMinutes. Ich habe auch einen Slicer für EntryDT:

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

I 2 neue Spalten erstellen müssen, die darstellen:

  1. Die Gesamt TimeInMinutes ein Mitarbeiter auf allen PriceAgreements gearbeitet hat Also für EmployeeId # 1, der Gesamt wäre 100.
  2. Die gesamte TimeInMinutes ALLE Mitarbeiter haben gearbeitet, aber nur für die PriceAgreements der aktuelle Mitarbeiter (aktuelle Zeile) hat gearbeitet.

Die Tabelle würde wie folgt aussehen (ohne die PriceAgreementIds in Klammern):

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) 

Spalte „TimeInMinutes auf PriceAgreements“ ganz einfach ist, aber der andere, ich kann nicht eine Lösung finden ...

ich habe diesen DAX Ausdruck fing ich an, aber es ist nicht vollständig:

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

TEmployee ist eine Dimension lin ked an die Haupt-Tabelle.

Jede Hilfe wäre willkommen. Danke

Antwort

1

ich dies auf als Antwort bin zu werfen, weil (a) es könnte Sie (oder jemand anderes) in der richtigen Richtung geht los und (b) wenn sichergestellt ist, dass ein Mitarbeiter würde immer nur hat Zeiteinträge, die 2 Preisvereinbarungen entsprechen, dies würde funktionieren - was für Sie wahrscheinlich der Fall ist, aber für andere, die versuchen, eine ähnliche Sache zu erreichen, der Fall sein könnte.

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

Diese Maßnahme ist zu sagen: SUM das TimeInMinutes für alle Datensätze in der Tabelle TEntry wo die PriceAgreementID paßt entweder das Minimum oder Maximum PriceAgreementID (im Rahmen der aktuellen Zeile) und der PriceAgreementID ist nicht leer.

Der fatale Fehler in dieser Antwort ist in der MIN und MAX. Für Mitarbeiter-ID 2, die 2 PriceAgreementIDs hat (1 & 2) - berechnet MIN die Minuten für PriceAgreementID 1, und MAX berechnet die Minuten für PriceAgreementID 2. Es wird jedoch auf einen Fall erweitert, in dem es mehr als 2 Preisvereinbarungen geben kann ... Ich weiß nicht, wie ich das machen soll.

es auf den Beispieldaten in Ihrer Frage nicht funktioniert, obwohl (da es ein Maximum von 2 Preisvereinbarungen pro Mitarbeiter):

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

Normalerweise, wenn ich mit einem Problem wie diese konfrontiert bin das ist nicht einfach zu lösen, ich denke über mein Datenmodell nach und stelle sicher, dass es einem Sternschema so gut wie möglich entspricht.

In Ihrem Fall kann ein Mitarbeiter mehrere Preisvereinbarungen haben und eine Preisvereinbarung kann mit vielen Mitarbeitern verbunden sein. Das bedeutet für mich eine Viele-zu-Viele-Beziehung. Ich empfehle dringend, mehr über Viele-zu-Viele-Beziehungen zu lesen, und ob die Umstrukturierung der zugrunde liegenden Tabellen (z. B. um eine Bridge-Tabelle zu enthalten) dazu beitragen würde, Sie näher an die Antwort zu bringen, die Sie benötigen.

Ein guter Ausgangspunkt könnte sein: https://www.sqlbi.com/articles/many-to-many-relationships-in-power-bi-and-excel-2016/

+1

Wie Sie sagten, dies nicht zu meiner Situation gilt. Ich bin neu bei PowerBI, also habe ich immer noch Ihre Antwort und den von Ihnen geteilten Link gelernt. Also vielen Dank dafür. Was mein Problem betrifft, habe ich die Spalte "Measure" direkt in SQL in einer Ansicht berechnet, die die Tabelle TEmployee darstellt. Das war viel einfacher. Vielen Dank! – vincenormand

Verwandte Themen