2017-04-03 3 views
0

나는 달성하려고 시도하지만 그것을하는 방법을 모른다.다른 열의 많은 값을 조건으로하는 열의 SUM

는 정말 같은 직원 시간 항목을 나타내는 치수 (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 

내가 표현이 새 열을 만들어야합니다

  1. 직원이 그래서 직원 ID # 1, 총에 대한 모든 PriceAgreements 에 근무하고 총 TimeInMinutes
  2. 총 TimeInMinutes ALL Employees는 현재 작업했지만 현재 Employee (현재 행)가 작업 한 PriceAgreements에만 적용됩니다.

    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은"매우 쉽지만, 다른 하나는, 나는 해결책을 찾을 수 없습니다 ... :

표는 (괄호 안에 PriceAgreementIds없이)과 같을 것이다

는 나는 시작이 DAX 식을 가지고 있지만, 그것은 완료되지 않은 :

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

TEmployee는 차원 린입니다 주 TEntry 테이블에 ked.

도움을 주시면 감사하겠습니다. 경우 (A)가 (또는 다른 사람) 올바른 방향으로 가고 그리고 (b)가 직원이 오직있는 것이 보장된다 얻을 수 있기 때문에 당신에게 내가 대답으로이 문제를 던지고있어

답변

1

감사 2 가지 가격 합의에 해당하는 시간 항목이 있으면 작동 할 것입니다. 이는 귀하에게 해당 될 가능성은 낮지 만 비슷한 것을 이루려는 다른 사람에게는 해당 될 수 있습니다. PriceAgreementID 최소 OR (현재 행의 맥락에서) 최대 PriceAgreementID 중 하나와 일치하는 TEntry 테이블의 모든 레코드에 대한 합 TimeInMinutes과 PriceAgreementID은 비어 있지 :

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

이 법안은 말하고있다.

이 답변의 치명적인 결함은 MIN 및 MAX입니다. 2 개의 PriceAgreementIDs (1 & 2)가있는 직원 ID 2의 경우 MIN은 PriceAgreementID 1의 분을 계산하고 MAX는 PriceAgreementID 2의 분을 계산합니다. 그러나 PriceAgreementID가 2 인 경우로 확장하려면 ... 어떻게 해야할지 모르겠다.

그것은, 귀하의 질문에 샘플 데이터에 작동합니까

하지만 (직원 당 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에서 "측정"열을 계산 결국 훨씬 더 쉽게 그런 식으로했다. 감사합니다. – vincenormand

관련 문제