AB test use case script does not assume the same percentage of cases.

Avatar

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile
tokuchan
Level 1

24-06-2021

Hello. I'm beginner.

The following AB test use case script does not assume the same percentage of cases.

 

https://experienceleague.adobe.com/docs/campaign-classic/using/sending-messages/a-b-testing/use-case...

 

Is there a way to control it in the the same percentage of cases?

For example, if the same percentage of cases, deliver A as the winner.

Thanks.

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar
Affirm 100
MVP
_Manoj_Kumar
MVP

Likes

129 likes

Total Posts

329 posts

Correct reply

104 solutions
Top badges earned
Affirm 100
Validate 1
Contributor
Ignite 1
Shape 1
View profile

Avatar
Affirm 100
MVP
_Manoj_Kumar
MVP

Likes

129 likes

Total Posts

329 posts

Correct reply

104 solutions
Top badges earned
Affirm 100
Validate 1
Contributor
Ignite 1
Shape 1
View profile
_Manoj_Kumar
MVP

24-06-2021

Hello @tokuchan 

 

To add this scenario you can have multiple query def statements for the specific delivery.

 

For this you will have to add @id='YOUR_DELIVERY ID' in the where condition.

Once you have the queries for two deliveries you can compare the result if the result if same then you can select Delivery A else let the winner delivery be the final delivery

 

Here is an example for the first delivery.

var deliveryA = xtk.queryDef.create(
     <queryDef schema="nms:delivery" operation="get">
       <select>
         <node expr="@id"/>
         <node expr="@label"/>
         <node expr="[@operation-id]"/>
         <node expr="[@workflow-id]"/>
         <node expr="[indicators/@estimatedRecipientOpenRatio]" alias="openRatio/>
       </select>
       <where>
         <condition expr={"@FCP=0 and [@workflow-id]= " + instance.id +" and @id="+DELIVERY_PRIMARY_KEY_HERE}/>
       </where>
        
     </queryDef>).ExecuteQuery()
   

Similarly you can create the query for delivery B and then compare the openRatio to decide your final delivery.

 

Thanks,

Manoj

Answers (2)

Answers (2)

Avatar

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile
tokuchan
Level 1

30-06-2021

Hello @_Manoj_Kumar,  I made some corrections.
But, I get an "Invalid XML Name" error.

 

 

//Confirmation of acquisition of deliveryId
logInfo ("instance.vars.deliveryAid = [" + instance.vars.deliveryAid + "]");
logInfo ("instance.vars.deliveryBid = [" + instance.vars.deliveryBid + "]");
var deliveryAid = instance.vars.deliveryAid;
var deliveryBid = instance.vars.deliveryBid;


//deliveryA
var deliveryA = xtk. queryDef.create (
	<queryDef schema="nms :delivery" operation="get">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id] "/>
			<node expr="[@workflow-id]"/>
			<node expr="[indicators/@reactivity]" alias="openRatio"/>
		</select>
	<where>
		<condition expr-{"@id=" + deliveryAid }/>
	</where>
	</queryDef>).ExecuteQuery ()

for each (var variable in deliveryA) {
	var winidA = variable.@id
	var winlabelA = variable.@label
	var openRatioA = variable.openRatio
	logInfo ("var winidA = [" + winidA + "]");
	logInfo ("var winlabelA = [" + winlabelA + "]");
	logInfo ("var openRatioA = [" + openRatioA + "]");
}

//deliveryB
var deliveryB = xtk.queryDef.create (
	<queryDef schema="nms:delivery" operation="get">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id] "/>
			<node expr="[@workflow-id]"/>
			<node expr="[indicators/@reactivity]" alias="openRatio"/>
		</select>
	<where>
		<condition expr={"@id=" + deliveryBid }/>
	</where>
	</queryDef>).ExecuteQuery ()

for each (var variable in deliveryB) {
	var winidB = variable.@id
	var winlabelB = variable.@label
	var openRatioB variable.openRatio
	logInfo ("var winidB = [" + winidB + "]");
	logInfo ("var winlabelB = [" + winlabelB + "]");
	logInfo ("var openRatioB = [" + openRatioB + "]");
}

//Compare open rates
if (openRatioA == openRatioB) {
	var winner = "deliveryA";
} else if (openRatioA > openRatioB) {
	var winner = "deliveryA";
} else if (openRatioA < openRatioB) {
	var winner = "deliveryB";
}

//Confirm winner
logInfo ("var winner = [" + winner + "]");

//Below, the sample script
var delivery = nms.delivery.create ()
delivery.Duplicate ("nms:delivery " + winner.@id)

delivery.label = winner.@label + " final"

delivery.operation_id = winner.@["operation-id"]
delivery.wrorkflow_id = winner.@ ["workflow-id"]

delivery.scheduling.validationMode = "manual"
delivery.scheduling.delayed = 0

delivery.save ()

vars.deliveryId = delivery.id

//Output new delivery ID
logInfo ("vars.deliveryId = [" + vars.deliveryId + "]");

 


It seems that the delivery object cannot be duplicated.
cannot put @ FCP = 0, [@ workflow-id], [operation-id] in <where> </ where>.

I'd really appreciate it if you could give me your advice.
Thank you.

Avatar

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile

Avatar
Validate 1
Level 1
tokuchan
Level 1

Likes

0 likes

Total Posts

10 posts

Correct reply

0 solutions
Top badges earned
Validate 1
View profile
tokuchan
Level 1

29-06-2021

Hello @_Manoj_Kumar,  Thank you for reply.

I tried the following script in another workflow.

 

 

 

 

 

 

//deliveryA
var deliveryA = xtk.queryDef.create (
	<queryDef schema="nms:delivery" operation="select">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id] "/>
			<node expr=" (@workflow-id]"/>
			<node expr="[indicators/@reactivity]" alias="openRatio"/>
		</select>
		<where>
			<condition expr={"@id=" + DELIVERY_ID }/>
		</where>
	</queryDef>)

var responceA = deliveryA.ExecuteQuery ();

for each (var variable in responceA) {
	vars.winidA = variable.@id
	vars.winlabelA = variable.@label
	vars.openRatioA = variable.openRatio

	logInfo ("vars.winidA = [" + vars.winidA + "]");
	logInfo ("vars.winlabelA = [" + vars.winlabelA + "1");
	logInfo ("vars.openRatioA = [" + vars.openRatioA + "]");
}

//deliveryB
var deliveryB = xtk. queryDef.create (
	<queryDef schema="nms:delivery" operation="select">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id]"/>
			<node expr=" [@workflow-id]"/>
			<node expr=" [indicators/@reactivity]" alias="openRatio"/>
		</select>
		<where>
			<condition expr={"@id=" + DELIVERY_ID }/>
		</where>
	</queryDef>)

var responceB = deliveryB.ExecuteQuery ();

for each (var variable in responceB) {
	vars.winidB = variable.@id
	vars.winlabelB = variable.@label
	vars.openRatioB = variable.openRatio
	
	logInfo ("vars.winidB = [" + vars.winidB + "]");
	logInfo ("vars.winlabelB = [" + vars.winlabelB + "]");
	logInfo ("vars.openRatioB = [" + vars.openRatioB + "]");
}

//Compare open rates
if (vars. openRatioA == vars.openRatioB) {
	var winner = deliveryA;
	vars.winner = "deliveryA";
} else if (vars.openRatioA > vars.openRatioB) {
	var winner = deliveryA;
	vars.winner = "deliveryA";
} else if (vars.openRatioA < vars.openRatioB) {
	var winner = deliveryB;
	vars.winner = "deliveryB";

//Confirm winner
logInfo ("var winner = [" + winner + "]");
logInfo ("vars.winner = (" + vars.winner + "]");

 

 

 

I was able to get the open rate and compare it.

The winner was 1 and the loser was 0.

 

But, when I incorporated it into the Mail delivery workflow and added logic to duplicate the winner, I got an "Invalid XML Name" error.

 

 

 

//Confirmation of acquisition of deliveryId
logInfo ("instance.vars.deliveryAid - [" + instance.vars.deliveryAid + "]");
logInfo ("instance.vars.deliveryBid = [" + instance.vars.deliveryBid + "]");

//deliveryA
var deliveryA = xtk.queryDef.create (
	<queryDef schema="nms:delivery" operation="select">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id]"/>
			<node expr="(@workflow-id] "/>
			<node expr="[indicators/@reactivity]" alias="openRatio"/>
		</select>
		<where>
			<condition expr={"@FCP=0 and [@workflow-id]=" + instance.id +"and @ID=" + instance.vars.deliveryAid }/>
		</where>
	</queryDef>)

var responceA = deliveryA.ExecuteQuery()

for each (var variable in responceA) {
	vars.winidA = variable.@id
	vars.winlabelA = variable.elabel
	vars.openRatioA = variable.openRatio

	logInfo ("vars.winidA = [" + vars.winidA + "]");
	logInfo ("vars.winlabelA = [" + vars.winlabelA + "]");
	logInfo ("vars.openRaticA = [" + vars.openRatioA + "]");
}


//deliveryB
var deliveryB xtk.queryDef.create (
	<queryDef schema="nms:delivery" operation="select">
		<select>
			<node expr="@id"/>
			<node expr="@label"/>
			<node expr="[@operation-id]"/>
			<node expr="[@workflow-id]"/>
			<node expr="[indicators/@reactivity]" alias="openRatio"/>
		</select>
	<where>
		<condition expr={"@FCF=0 and [@workflow-id]= " + instance.id +"and @ID= + instance.vars.deliveryBid }/>
	</where>
	</queryDef>)

var responceB = deliveryB.ExecuteQuery()

for each (var variable in responceB) {
	vars.winidB = variable.@id
	vars.winlabelB = variable.@label
	vars.openRatioB = variable.openRatio

	logInfo ("vars.winidB = [" + vars.winidB + "]");
	logInfo ("vars.winlabelB = [" + vars.winlabelB + "]");
	logInfo ("vars.openRatioB = [" + vars.openRatioB + "]");

//Compare open rates
if (vars.openRatioA = vars.openRatioB) {
	var winner = deliveryA;
	vars.winner = "deliveryA";
} else if (vars.openRatioA > vars.openRatioB) {
	var winner = deliveryA;
	vars.winner = "deliveryA";
} else if (vars.openRatioA < vars.openRatiOB) {
	var winner = deliveryB;
	vars.winner = "deliveryB";
}

//Confirm winner
logInfo ("var winner = [" + winner + "]");
logInfo ("vazs.winner = [" + vars.winner + "]");

//Below, the sample script
var delivery = nms.delivery.create ()
delivery.Duplicate ("nms delivery|" + winner.@id)

delivery.label = winner.@label + " final"

delivery.operation_id = winner.@["operation-id"]
delivery.wrorkflow_id = winner.@ ["workflow-id"]
delivery.scheduling.validationMode = "manual"
delivery.scheduling.delayed = 0

delivery.save ()

vars.deliveryId = delivery.id

//Output new delivery ID
logInfo ("vars.deliveryId = [" + vars.deliveryId + "]");

 

 

 

I'm not engineer...

I'm not familiar with javascript.

I don't know the cause.

Where is the mistake?

I'd really appreciate it if you could give me your advice.

Thank you.