我需要能够在多对多关系表中计算度量。这是我的两个桌子:
合同表
Serial# ContractTyp StartDate EndDate
A MP 1/1/2017 1/6/2018
B ML 10/24/2017 6/30/2020
A ML 1/6/2018 12/30/2019
C MU 5/15/2018 1/1/2021
性能表
Serial# Diff Good Bad Date
A 15 1 0 1/30/2017
B -24 1 0 12/17/2017
A 57 0 1 4/22/2017
A 18 1 0 2/1/2018
C 123 0 1 9/12/2018
所以,我的测量很简单。它只是按序列号计算好百分比。
NUM_GOOD = CALCULATE(COUNTA('Performance'[Good]),'Performance[Good] IN {"1"})
NUM_BAD = CALCULATE(COUNTA('Performance'[Bad]),'Performance[Bad] IN {"1"})
PERFORMANCE_METRIC = NUM_GOOD/(NUM_BAD + NUM_GOOD)
我需要能够为每个序列号运行该性能指标,但仅在机器处于MP或MU ContractTyp的情况下才可以运行。因此,我需要它能够查看性能表中的日期,并确保日期在合同表上的序列号为MP或MU的合同表的StartDate和EndDate之间。
因此,例如,如果我想查看过去两年中带有MP或MU的ContractTyp的所有Serial#的性能,我希望结果看起来如下:
Serial# PERFORMANCE_METRIC
A 50%
B 100%
C 0%
谢谢!
答案 0 :(得分:1)
下面是计算列的公式,您可以将其添加到“性能”表中以返回True / False值(请参阅您的评论)。
解释逻辑:
Has Contract =
VAR vSerial = [Serial#]
VAR vDate = [Date]
RETURN
IF (
CALCULATE (
COUNTROWS ( Contracts ),
Contracts[Serial#] = vSerial,
Contracts[ContractTyp] IN { "MP", "MU" },
Contracts[StartDate] <= vDate,
Contracts[EndDate] >= vDate
) > 0,
TRUE (),
FALSE ()
)
答案 1 :(得分:0)
一种方法是在Power BI中创建一个新表,方法是将处于“序列号”,“开始日期”和“结束日期”级别的“合同”表转换为“序列号”和“日期”级别。例如,如果数据具有以下记录:
ID Type Start End
1 MP 1/1/2019 1/2/2019
您应该将其转换为如下形式:
ID Type Date
1 MP 1/1/2019
1 MP 1/2/2019
以下链接应对此有所帮助:
一旦表被转换,您应该能够基于序列号和日期进行简单的连接,它将是一对一的关系。然后,您可以应用所需的任何过滤器。
这里的一个警告是,数据的大小非常重要。如果“合同”表中有合理数量的记录,则可以使用,否则数据可能会爆炸。
答案 2 :(得分:0)
使用合并查询添加另一个可能的答案。无需创建关系,您可以直接合并两个表。如果您之前没有做过此操作,则可以在编辑查询窗口中访问它。使用序列号作为键合并两个表后,可以使用以下公式作为过滤器:
Filter Field = IF(Date2[Date]>=Date2[Date1.Start]&&Date2[Date]<=Date2[Date1.End],1,0)
然后,您只需在过滤器窗格中设置“过滤器字段” = 1,就可以了。希望这会有所帮助。
这里是有关合并查询的教程。该链接专门用于excel,但它也应在power bi中起作用: