添加分析字段以访问查询的好方法?

我正在使用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函数。