如何有效地获取通过两个属性独特的早期行?
以前 ,我问过我们如何通过递增的ID字段获取简单的前一行(谢谢PetrHavlík)。 在这种情况下,我有ID和ACTIVITY,其中(ACTIVITY&ID)是每行的唯一值。
从SQL的angular度来看,我只是在ACTIVITY = ACTIVITY和ID = ID – 1的连接表中进行一个内部连接,并获得我需要的行。
换句话说,我想要以前的百分比属于同一个活动。
所以使用上一篇文章中的答案,我可以得到1000行的结果。 但是,如果我要增加这个行数到85000+这个function是令人生畏的缓慢。
= SUMX(FILTER(Query,(EARLIER([ID])= [ID] + 1)&&(EARLIER([ACTIVITY])= [ACTIVITY])),[PERCENTAGE])
我的最终结果是使这个function在700万行,如果这是可能的,我怎么可以优化它? 如果不是,你能向我解释为什么我不能这样做吗?
一种select可能是尝试一种方法的变化 – 没有你的数据集我不能testing它是否更有效,但我已经在1m +行数据集上运行类似的东西没有问题:
= CALCULATE ( SUM ( [PERCENTAGE] ), FILTER ( Query, [ID] = EARLIER ( [ID] ) - 1 && [ACTIVITY] = EARLIER ( [ACTIVITY] ) ) )
可能不是你想听到的,但是在导入SQL的时候这样做可能是你最好的select。
这里最好的答案是使用Lookupvalue,它会绕过你需要做的任何filter,并允许你直接查询表中的值。 这会更快。
它看起来像这样:
=LOOKUPVALUE(table[PERCENTAGE], [ID] = EARLIER ( [ID] ) - 1)
请确保ID值是唯一的,因为lookupvalue只能返回单个结果,当多于一行返回时,它将会出错。 你可以用iserror来包装它
= IF(ISERROR(LOOKUPVALUE(table[PERCENTAGE], [ID] = EARLIER ( [ID] ) - 1)), BLANK() , LOOKUPVALUE(table[PERCENTAGE], [ID] = EARLIER ( [ID] ) - 1) ) )
JShmay ,
这是几乎相同的问题 – 正如Jacob所build议的那样,您可以使用通常在Excel / PowerPivot中可用的逻辑运算符 。
你真的可以为此而疯狂,如果你需要更复杂的东西 – 例如,在其他条件下得到两点之间的差异,我会指出你非常类似的问题和我的答案:
- 我可以比较PowerPivot中相邻行中同一列中的值吗?
- 第二次最新date – DAX
希望这可以帮助 :)