Как фильтровать по двум связанным таблицам в функции SUMX в DAX - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть две таблицы A и B, как показано ниже. AccountID в A связан с AccountID в B.

A

AccountID   CmpName AccFlag SysStartTime  sysEndTime
 A1          Test1   1       1/1/2020      12/31/9999
 A2          Test2   0       1/2/2020      12/31/9999
 A3          Test3   1       1/2/2020      12/31/9999


B

ContactId   AccountID   ConFlag SysStartTime   SysEndTime
C1          A1          1       1/1/2020        12/31/9999
C2          A1          1       1/1/2020        12/31/9999
C3          A1          0       1/1/2020        12/31/9999
C4          A2          1       1/2/2020        12/31/9999

Я хочу получить количество записей в A, имеющих 3 или более связанных записей в B. Я также хочу отфильтровать счет Accflag, conflag, sysStartTime и sysEndTime из обеих таблиц. У меня есть следующий DAX, и он дает мне количество записей в A, которые имеют 3 или более связанных записей в B, отфильтрованных по Accflag, sysStartTime и sysEndTime из A. Я хочу добавить фильтрацию с помощью ConFlag, sysStartTime и sysEndTime, но Я не уверен, как добавить его в следующий DAX. Пожалуйста помоги.

 SUMX ( A, 
 IF ( COUNTROWS ( RELATEDTABLE ( B ) ) >= 3 && 
 A[Accflag]=1 && 
 A[SysStartTime]>=TODAY() &&  
 A[SysEndTime]>= VALUE("12/31/9999"),1 )
 )

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Я думаю, что самый простой способ сделать это - создать вычисляемый столбец, который показывает, проходит ли каждая строка проверку или нет. Может работать что-то похожее на приведенное ниже:

Ind = 
    VAR AccountID=A[AccountID]
    VAR Count1 = CALCULATE(COUNTROWS(B),FILTER(B,B[AccountID]=AccountID))
RETURN IF(Count1>=3 && A[Accflag]=1 && A[SysStartTime]>=TODAY() && A[SysEndTime]>= VALUE("12/31/9999"),1,0)

Ind выдаст 0 или 1 для каждой строки, а затем вы можете просто суммировать поле, чтобы получить общее количество строк, соответствующих каждому критерию. Это будет полезно, если вам нужно добавить дополнительные условия для расчета. Надеюсь, это поможет.

0 голосов
/ 11 февраля 2020

Вы можете сделать это так:

Go в редакторе запросов и добавить пустой запрос. Отнесите этот пустой запрос (давайте назовем этот запрос TableBGrouped) к вашему TableB:

 = TableB

Теперь примените следующий шаг:

enter image description here

Отношение теперь будет выглядеть так:

enter image description here

Добавить меру к TableBGrouped:

3 or more Count = CALCULATE(COUNT(TableBGrouped[AccountID]); TableBGrouped[Count] > 2)

Добавьте фильтр, и вы получите свой результат:

enter image description here

Теперь вы можете применить фильтр:

enter image description here

...