添加分析字段以访问查询的好方法?
我正在使用Excel数据透视表来分析大Access表中logging的值。
比如我有桌子
mark1 | mark2 | value x |y |1 w |z |2 t |l |3
现在我正在使用访问查询字段expression式添加一个字段“mymark”:
GROOPER: Switch( [mark1]="x";"yes"; [mark2]="z";"no"; 1=1;"dunno" )
甚至更复杂:
COMPLEXGROOPER: Switch( ([mark1]="x" or [mark1]="r") and [mark2]<>"";"yes"; [mark2]="z" or [mark2]="zz" or left([mark2],1)="z";"no"; 1=1;"dunno" )
我的目标是以如下方式获取数据:
mark1 | mark2 | value| mymark x |y |1 |yes w |z |2 |no t |l |3 |dunno
然后通过“mymark”在Excel数据透视表中对其进行分析
直到我遇到了1023个符号的expression式大小限制之后,expression式才可以。
有没有克服这个限制的好办法?
另外我试图打包VBA函数中的所有逻辑,然后在访问expression式中使用函数名称。 它适用于在访问中创build查询结果,但是当我试图使用该查询作为Excel数据透视表数据的源时,事实上我的自定义vba函数在expression式中是未定义的。
1)把分组值放在一个单独的表格中怎么样:
key | value -------------- x | yes y | no
和LEFT JOIN
:
FROM mytable LEFT JOIN keyvalueTable ON mytable.mark = keyvalueTable.key
然后,要显示不在keyvalueTable中的值,可以使用Nz
,如果它不是null,则返回第一个参数,否则返回第二个参数:
GROUPER: Nz(keyvalueTable.value, "dunno")
如果您不能在链接的Excel查询中使用Nz
,请尝试Iif
:
GROUPER: Iif(keyvalueTable.value Is Null, "dunno", keyvalueTable.value)
2)根据您的需要,您也可以考虑在Access中使用交叉表查询,而不是从Excel中读取。 您可以在交叉表查询中使用VBA函数。