1

我有一个包含 6 个字段的数据扩展:

EmailAdress (type: EmailAdress, unique)
Field1 (type: number, not nullable)
Field2 (type: number, not nullable)
Field3 (type: number, not nullable)
Field4 (type: number, not nullable)
Field5 (type: number, not nullable)

我有 3 个目标:

1. 将每个字段的值传递给 ampscript 变量(简单的部分)

%%[
Set @var1 = Field1
Set @var2 = Field2
Set @var3 = Field3
Set @var4 = Field4
Set @var5 = Field5
]%%

2. 根据变量的值对变量进行降序排序,并 (3) 将它们传递到五个内容区域之一。

%%=ContentAreaByName("my contents\Campaigns\mainitem\@maxvar1")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem1\@maxvar2")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem2\@maxvar3")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem3\@maxvar4")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem4\@maxvar5")=%%

例如,如果我的字段的值为:

Field1: 10
Field2: 15
Field3: 5
Field4: 1
Field5: 100

然后我的五个内容区域应填充如下:

%%=ContentAreaByName("my contents\Campaigns\mainitem\@field5")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem1\@field2")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem2\@field1")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem3\@field3")=%%
%%=ContentAreaByName("my contents\Campaigns\subitem4\@field4")=%%

将值传递给 amscript 值非常容易。但是 desc 对它们进行排序并将它们传递给适当的 @maxvar 对于我有限的 ampscript 知识来说似乎有点牵强。

任何帮助是极大的赞赏!

4

1 回答 1

0

很好的问题。我将使用查询活动取消您的数据扩展,然后使用LookupOrderedRows()函数以正确的顺序检索它们。在 AMPScript 中排序太麻烦了。

T-SQL UNPIVOT() 函数在 ET/SFMC 上不起作用,因此您需要在查询活动中以老式方式执行此操作:

select 
emailAddress
, field
, fieldValue
from [unpivot-test]
cross apply (
  select 'field1', field1 union all
  select 'field2', field2 union all
  select 'field3', field3 union all
  select 'field4', field4 union all
  select 'field5', field5
) c (field, fieldValue)

我的博客上有几个 AMPScript 查找示例。这是 LookupOrderedRows() 之一:

%%[
var @rows, @row, @rowCount, @numRowsToReturn, @lookupValue, @i

set @lookupValue = "whee"
set @numRowsToReturn = 0 /* 0 means all */
set @rows = LookupOrderedRows("DataExtensionName",@numRowsToReturn,"DEColumn1 desc, DEColumn2 asc","LookupColumn", @lookupValue)
set @rowCount = rowcount(@rows)

if @rowCount > 0 then

for @i = 1 to @rowCount do

var @DEColumn1, @DEColumn2
set @row = row(@rows,@i) /*get row based on loop counter */
set @DEColumn1 = field(@row,"DEColumn1")
set @DEColumn2 = field(@row,"DEColumn2")

]%%

Row %%=v(@i)=%%, DEColumn1 is %%=v(@DEColumn1)=%%, DEColumn2 is %%=v(@DEColumn2)=%%

%%[

next @i ]%%

%%[ else ]%%

No rows found

%%[ endif ]%%

此外,在salesforce.stackexchange.com上发布任何未来的 ET/SFMC 问题,并用marketing-cloud. 那里有很多人在问/回答问题。

于 2015-03-21T14:01:46.423 回答