PowerBi IF过滤器基于来自不同表的列中的值

时间:2019-08-20 10:30:24

标签: powerbi dax powerbi-desktop

我有2张桌子,如下所示 表1

 Value     Status
    A      Normal
    B      InProgress
    C      InProgress

表2

Value   SLA
A      10:00
B      13:00 
C      Multiple Times a Day

我需要创建一种措施,根据表2的SLA列中的状态和时间值返回数字。 所以,我的条件是:

1. If Status is "Normal" return 1
2. If Status is "InProgress", check corresponding 'SLA' value in Table2 and see if SLA is greater than current time or less than current time.
If its greater return 2, if its less return 3.
3. If SLA value is 'Multiple Times a Day' return 4.

请问我该怎么做?感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这取决于您的两个表之间的关系。

当我从表1到表2的比例仅为1:1时,根据您的情况,我可以轻松获得所需的结果。

下面基于1:1关系计算的字段表达式。您可能想要更改返回值和小条件,因为我将表2中的值作为文本输入。

  Return = IF('Table'[Status]="Normal";1;
IF('Table'[Status]="InProgress";IF(LOOKUPVALUE('Table (2)'[SLA];'Table (2)'[Value];'Table'[Value])>"10:00";2;2);IF(LOOKUPVALUE('Table (2)'[SLA];'Table (2)'[Value];'Table'[Value])="Multiple Times a Day";4;0))
)

现在,当您将关系从1:1更改为1:M或M:M时,简单的LOOKUPVALUE将无济于事,因为DAX会为1个主键返回许多行。

在这里,您将需要使用CALCUALTE或类似的函数,具体取决于您的实际数据。 现在为简单起见,我创建了新的Colum Return并赋予了价值

enter image description here

Return = If('Table (3)'[SLA]="10:00";2;IF('Table (3)'[SLA]="Multiple Times a Day";4;3))

现在基于Return列,我正在使用以下函数返回最终结果

Column = IF('Table'[Status]="Normal";1;CALCULATE ( 
Sum('Table (2)'[Return]);
FILTER(
    ALL('Table (2)');
    'Table (2)'[Value]='Table'[Value]
    )
    )
    )

enter image description here