具有多个 TOPN 循环的 PowerBI 复杂计算列

PowerBI Complex Calculated Column with multiple TOPN loops

使用下面的信息,我需要在 DAX 中创建一个名为 Table 的新 table。

我的问题是“新值”列的以下措施仅返回 saleID 的 TOPN 审计记录(只要审计记录可以包含“更改日期”和“有效日期”之间的销售日期直到“日期”。)。应调整此过滤器以仅检测“更改日期”是否发生在“销售日期”当天或之后。 “有效期至”列不应计入此计算。

new value = 
VAR CurrentContractDate = [Sale Date]
RETURN
VAR RespEmp =
            TOPN (
                1,
                DynamicsAudit,
                IF (
                    CurrentContractDate <= DynamicsAudit[Valid Until]
                        && CurrentContractDate >= DynamicsAudit[Changed Date], //Check, whether there is matching date
                    DATEDIFF ( DynamicsAudit[Changed Date], DynamicsAudit[Valid Until], DAY ), //If so, rank matching locations (you may want to employ a different formula)
                    MIN (  //If the location is not matching, calculate how close it is (from both start and end date)
                        ABS ( DATEDIFF ( CurrentContractDate, DynamicsAudit[Changed Date], DAY ) ),
                        ABS ( DATEDIFF ( CurrentContractDate, DynamicsAudit[Valid Until], DAY ) )
                    ) + 1000000 //Add a discriminating factor in case there are matching rows that should be favoured over non-matching.
                ), 1
            )
            RETURN
            SELECTCOLUMNS( RespEmp,"ResponsibleEmployee", [new value] )

那么这么复杂的过滤器长什么样子呢?

new value = 
VAR sale = [SaleID]
VAR saleDate = [Sale Date]
VAR tbl = SUMMARIZE(FILTER(DynamicsAudit, DynamicsAudit[SaleID] = sale && DynamicsAudit[Changed Date] >= saleDate),DynamicsAudit[new value])
VAR tbl2 = NATURALINNERJOIN(
            FILTER(DbEmployees, DbEmployees[StartDate]<=saleDate && DbEmployees[EndDate] >= saleDate),
            CALCULATETABLE(DynamicsContacts, TREATAS(tbl, DynamicsContacts[EmployeeID])))

RETURN MAXX(TOPN(1,tbl2, IF(DbEmployees[Position] = "clerk", 1,2), ASC), DynamicsContacts[EmployeeID])

第一个 table 表达式为您提供符合条件的员工列表。

第二个 table 表达式加入了员工(由销售日期期间合同有效的人过滤)和联系人(由符合条件的人过滤)

最后做一个 Top 1,它首先选择文员,然后选择经理。