1

我正在使用 Excel 数据透视表来分析大型 Access 表中的记录值。

例如我有桌子

mark1 | mark2 | value
x     |y      |1
w     |z      |2
t     |l      |3

现在我正在使用访问查询字段表达式添加一个字段“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 个符号的表达式大小限制之前,表达式没问题。

有没有克服这个限制的好方法?

我还尝试将所有逻辑打包在 VBA 函数中,然后在访问表达式中使用函数名。它适用于在访问中生成查询结果,但是当我尝试使用该查询作为 Excel 数据透视表数据的源时,错误上升事实上我的自定义 vba 函数在表达式中未定义。

4

1 回答 1

1

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")

如果您不能Nz在链接的 Excel 查询中使用,请尝试Iif

GROUPER: Iif(keyvalueTable.value Is Null, "dunno", keyvalueTable.value)

2) 根据您的需要,您还可以考虑在 Access 中使用交叉表查询,而不是从 Excel 中读取。您可以在交叉表查询中使用 VBA 函数。

于 2012-08-31T07:27:51.313 回答