Previously,我问我们如何通过递增的ID字段获取简单的前一行(谢谢PetrHavlík)。在这种情况下,我有ID和ACTIVITY,其中(ACTIVITY& ID)是每行的唯一值。
从SQL的角度来看,我只是做一个内连接,其中ACTIVITY =连接ACTIVITY和ID = ID - 1在连接表中并得到我需要的行。
换句话说,我希望以前的百分比属于同一个活动。
因此,使用前一个post中的答案,我能够获得1000行所需的结果。但是,如果我要将此行数增加到85000+,则此功能非常慢。
= SUMX(FILTER(查询,(EARLIER([ID])= [ID] + 1)&&(EARLIER([ACTIVITY])= [ACTIVITY])),[PERCENTAGE])
我的最终结果是将此功能设置为多达700万行,如果可行,我该如何优化它?如果不是,你能解释一下为什么我不能这样做吗?
答案 0 :(得分:3)
一种选择可能是尝试对方法进行修改 - 没有您的数据集我无法测试它是否更有效但我在1m +行数据集上运行类似的东西没有问题:
=
CALCULATE (
SUM ( [PERCENTAGE] ),
FILTER (
Query,
[ID] = EARLIER ( [ID] ) - 1
&& [ACTIVITY] = EARLIER ( [ACTIVITY] )
)
)
可能不是你想听到的,但在导入时使用SQL执行此操作可能是你最好的选择。
答案 1 :(得分:2)
这里最好的答案是使用Lookupvalue,它会绕过你需要做的任何过滤器,并允许你直接查找表中的值。这会快得多。
看起来像是:
=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)
)
)
答案 2 :(得分:2)
<强> JShmay 强>,
这几乎是同一个问题 - 正如Jacob建议的那样,你可以使用Excel / PowerPivot中通常可用的logical operators。
你真的可以为此疯狂,如果你需要更复杂的东西 - 例如在其他条件之后得到两点之间的差异,我会指出非常相似的问题和我对它们的回答:
希望这会有所帮助:)