[英]Power BI - Check if events are between two dates in related table
假設我有一個項目表及其關聯公司、日期和成本:
項目 ID 是唯一的,但一個公司可以有多個項目。 此表與“公司”表鏈接(多對一):
然后將其與“狀態”表鏈接(一對多):
我這里只是使用colors,狀態的類型是任意的。
我正在尋找一種僅在公司處於“綠色”狀態時匯總每個公司的項目成本的方法。 我假設它可能是 Project 表上的計算列,可能只是作為 True/False 標志。 查看 Status 表,按 Company 篩選,將 Status 篩選為綠色,如果 Project[Date] 介於 Start Date 和 End Date 之間,則返回 True。
在上面的示例中,三個項目將被標記為 True:00001、00006 和 00007。
在 DAX 中執行此操作的最佳方法是什么?
由於在樣本數據中,同一公司在同一時期的紅色和綠色狀態重疊,我們假設如果所選日期存在綠色狀態,則即使同一公司也存在紅色狀態,該狀態也是綠色期間和同一家公司。
一種可能的解決方案是首先使用 boolean 標志 IsGreen 添加計算列。
這是一個簡單的公式,它遍歷檢查公司 ID、狀態和日期間隔的狀態表。
由於這是一個計算列,它僅在刷新期間執行,不會影響度量性能。
IsGreen =
VAR ProjectCompanyID = Project[Company ID]
VAR ProjectDate = Project[Date]
RETURN
NOT ISEMPTY (
FILTER (
'Status',
RELATED ( Company[Company ID] ) = ProjectCompanyID
&& 'Status'[Status] = "Green"
&& ProjectDate >= 'Status'[Start Date]
&& ProjectDate <= 'Status'[End Date]
)
)
然后我們可以使用 IsGreen 計算列實現 SumOfCostIfGreen 度量
SumOfCostIfGreen =
CALCULATE ( SUMX ( Project, Project[Cost] ), Project[IsGreen] )
這是生成的表格視覺效果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.