Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个TOPN循环的PowerBI复杂计算列_Powerbi_Dax_Calculated Columns - Fatal编程技术网

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

具有多个TOPN循环的PowerBI复杂计算列,powerbi,dax,calculated-columns,Powerbi,Dax,Calculated Columns,使用下面的信息,我需要在DAX中创建一个名为table的新表 我的问题是,“新值”列的以下度量值仅返回saleID的TOPN审核记录(只要审核记录可以包含介于“更改日期”和“有效期至”日期之间的销售日期)。应调整此过滤器,以仅检测“更改日期”是否发生在“销售日期”当天或之后。“有效期至”列不应包含在此计算中 new value = VAR CurrentContractDate = [Sale Date] RETURN VAR RespEmp = TOPN (

使用下面的信息,我需要在DAX中创建一个名为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] )
新值=
VAR CurrentContractDate=[销售日期]
返回
VAR RespEmp=
托普恩(
1.
动态审计,
如果(
CurrentContractDate=DynamicsAudit[更改日期],//检查是否有匹配日期
DATEDIFF(DynamicsAudit[更改日期]、DynamicsAudit[有效期至]、天),//如果是,则排列匹配位置(您可能需要使用不同的公式)
MIN(//如果位置不匹配,计算距离(从开始日期到结束日期)
ABS(DATEDIFF(当前合同日期,动态审计[更改日期],天)),
ABS(DATEDIFF(当前合同日期,动态审计[有效期至],天))
)+1000000//如果存在应优先于非匹配的匹配行,则添加判别系数。
), 1
)
返回
选择列(RespEmp,“ResponsibleeEmployee”、[新值])
那么,这样一个复杂的过滤器是什么样子的呢?

新值=
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])
VAR销售=[SaleID] VAR saleDate=[销售日期] VAR tbl=summary(过滤器(dynamicsudit,dynamicsudit[SaleID]=sale&&dynamicsudit[Changed Date]>=saleDate),dynamicsudit[new value]) 变量tbl2=NATURALINNERJOIN( 过滤器(DbEmployees,DbEmployees[StartDate]=saleDate), 可计算(DynamicContacts,TREATAS(tbl,DynamicContacts[EmployeeID])) 返回MAXX(TOPN(1,tbl2,IF(DbEmployees[Position]=“clerk”,1,2),ASC),dynamiccontacts[EmployeeID])
第一个表表达式获取符合条件的员工列表

第二个表表达式联接员工(按在销售日期期间合同处于活动状态的人过滤)和联系人(按符合条件的人过滤)


最后做一个Top 1,首先挑选职员,然后挑选经理。

你有什么具体问题吗?你能用一句话表达它吗?如果你想解决一个复杂的生产问题,找时间把它分成几个问题,这些问题可以用一句话来表达。如果您能够更麻烦地提供手工制作的示例数据,而不仅仅是复制粘贴您的生产环境,那将是非常棒的。如果您使用简单的数据重新创建生产问题,您有90%的机会自己解决它。如果你不想费心去设计可能为他人服务的教育问题,那么有一些自由职业者平台。第一句话为你提供了手工制作的示例数据。问题在一句话中,在示例代码的正下方指出。你所要求的一切都已经存在了。你试图使用DAX做的事情非常困难,你没有办法以不同的方式准备数据模型吗?例如,将员工和联系人合并?不太可能。这两个表来自不同的数据库,实际上使用的是一个关系表,因为它是一个多对多关系。。。