# Change expression from month to quarter

A

#### AccessKay

I have this expression in a calculated field in my query and it works fine
for the month. I enter the month via a text box on an unbound form. I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate the
quarter based on the date that I supply in my text box. It works if the
month is the first month in the quarter but if itâ€™s like Feb or March, it
returns the wrong amount. Can anyone help me fix this so that it pulls the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between ([Forms]![frmVarianceQtr]![txtMo1]) And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

V

#### vanderghast

assuming you have a dateTime and not a string, you can change the comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

A

#### AccessKay

This works...thankyou! I apologize for being greedy but how can I change
this to show the previous year's quarter?

vanderghast said:
assuming you have a dateTime and not a string, you can change the comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

AccessKay said:
I have this expression in a calculated field in my query and it works fine
for the month. I enter the month via a text box on an unbound form. I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate the
quarter based on the date that I supply in my text box. It works if the
month is the first month in the quarter but if itâ€™s like Feb or March, it
returns the wrong amount. Can anyone help me fix this so that it pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between ([Forms]![frmVarianceQtr]![txtMo1]) And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

V

#### vanderghast

Either you change the value in

FORMS!frmVarianceQtr!txtMo1

to reflect a year in last date, either you subtract 1 from Year(
CDate(FORMS!frmVarianceQtr!txtMo1) )

to obtain:

iif(Year(transDate) = Year(CDate(FORMS!frmVarianceQtr!txtMo1)) -1
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

Vanderghast, Access MVP

AccessKay said:
This works...thankyou! I apologize for being greedy but how can I change
this to show the previous year's quarter?

vanderghast said:
assuming you have a dateTime and not a string, you can change the
comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

AccessKay said:
I have this expression in a calculated field in my query and it works
fine
for the month. I enter the month via a text box on an unbound form. I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate the
quarter based on the date that I supply in my text box. It works if
the
month is the first month in the quarter but if itâ€™s like Feb or March,
it
returns the wrong amount. Can anyone help me fix this so that it pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between ([Forms]![frmVarianceQtr]![txtMo1])
And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

A

#### AccessKay

This gave me the previous quarter but what I'm wanting is the previous year's
quarter(e.g. Q1 of 2009). I tried working with it but I can't seem to get

Thank you again.

vanderghast said:
Either you change the value in

FORMS!frmVarianceQtr!txtMo1

to reflect a year in last date, either you subtract 1 from Year(
CDate(FORMS!frmVarianceQtr!txtMo1) )

to obtain:

iif(Year(transDate) = Year(CDate(FORMS!frmVarianceQtr!txtMo1)) -1
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

Vanderghast, Access MVP

AccessKay said:
This works...thankyou! I apologize for being greedy but how can I change
this to show the previous year's quarter?

vanderghast said:
assuming you have a dateTime and not a string, you can change the
comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

I have this expression in a calculated field in my query and it works
fine
for the month. I enter the month via a text box on an unbound form. I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate the
quarter based on the date that I supply in my text box. It works if
the
month is the first month in the quarter but if itâ€™s like Feb or March,
it
returns the wrong amount. Can anyone help me fix this so that it pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between ([Forms]![frmVarianceQtr]![txtMo1])
And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

V

#### vanderghast

Have you applied the -1 to the Year( ) ? (or to the quarter, Datepart("q",
.... ) ) .

As example, if FORMS!frmVarianceQtr!txtMo1 holds the value 2010.05.02, then

YEAR(FORMS!frmVarianceQtr!txtMo1) would be 2010

DatePart("q", CDate(FORMS!frmVarianceQtr!TxtMo1 )) will be 2,

and finally, the comparison will be (when all constants are finally fully
evaluated) :

iif( Year(transDate) = 2009 AND DatePart("q", transDate) = 2,
ODC_cost, 0 )

so the data considered, inside the true part of that iif, would be from
records where transDate is in 2009, second quarter, Note that the WHERE
clause is applied BEFORE that iif is computed... So if there is a WHERE
clause, in your query, which removes all data from 2009, you will only get 0
from what if left, once it is time to evaluate that iif.

Vanderghast, Access MVP

AccessKay said:
This gave me the previous quarter but what I'm wanting is the previous
year's
quarter(e.g. Q1 of 2009). I tried working with it but I can't seem to get

Thank you again.

vanderghast said:
Either you change the value in

FORMS!frmVarianceQtr!txtMo1

to reflect a year in last date, either you subtract 1 from Year(
CDate(FORMS!frmVarianceQtr!txtMo1) )

to obtain:

iif(Year(transDate) = Year(CDate(FORMS!frmVarianceQtr!txtMo1)) -1
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

Vanderghast, Access MVP

AccessKay said:
This works...thankyou! I apologize for being greedy but how can I
change
this to show the previous year's quarter?

:

assuming you have a dateTime and not a string, you can change the
comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

I have this expression in a calculated field in my query and it works
fine
for the month. I enter the month via a text box on an unbound form.
I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate
the
quarter based on the date that I supply in my text box. It works if
the
month is the first month in the quarter but if itâ€™s like Feb or
March,
it
returns the wrong amount. Can anyone help me fix this so that it
pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between
([Forms]![frmVarianceQtr]![txtMo1])
And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

A

#### AccessKay

I appreciate you explaining this. It helped a little to understand what
these statements mean but Iâ€™m not clear about the last part regarding the
WHERE statement. I think youâ€™re saying that if you have a WHERE clause in
front of the IIF statement, then some action happens firstâ€¦but then I get
lost. I donâ€™t have a WHERE but I do have a SUM. I think I need a -1 after
the YEARâ€¦as you indicated. That will give me 2009 but Iâ€™m wondering why it
gave me QTR4. Actually, I just tested by putting a 2009 date into the
textbox and now itâ€™s not returning any records at all (2010 dates work fine).
Yikes!!! Iâ€™m so confused.

vanderghast said:
Have you applied the -1 to the Year( ) ? (or to the quarter, Datepart("q",
... ) ) .

As example, if FORMS!frmVarianceQtr!txtMo1 holds the value 2010.05.02, then

YEAR(FORMS!frmVarianceQtr!txtMo1) would be 2010

DatePart("q", CDate(FORMS!frmVarianceQtr!TxtMo1 )) will be 2,

and finally, the comparison will be (when all constants are finally fully
evaluated) :

iif( Year(transDate) = 2009 AND DatePart("q", transDate) = 2,
ODC_cost, 0 )

so the data considered, inside the true part of that iif, would be from
records where transDate is in 2009, second quarter, Note that the WHERE
clause is applied BEFORE that iif is computed... So if there is a WHERE
clause, in your query, which removes all data from 2009, you will only get 0
from what if left, once it is time to evaluate that iif.

Vanderghast, Access MVP

AccessKay said:
This gave me the previous quarter but what I'm wanting is the previous
year's
quarter(e.g. Q1 of 2009). I tried working with it but I can't seem to get

Thank you again.

vanderghast said:
Either you change the value in

FORMS!frmVarianceQtr!txtMo1

to reflect a year in last date, either you subtract 1 from Year(
CDate(FORMS!frmVarianceQtr!txtMo1) )

to obtain:

iif(Year(transDate) = Year(CDate(FORMS!frmVarianceQtr!txtMo1)) -1
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

Vanderghast, Access MVP

This works...thankyou! I apologize for being greedy but how can I
change
this to show the previous year's quarter?

:

assuming you have a dateTime and not a string, you can change the
comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

I have this expression in a calculated field in my query and it works
fine
for the month. I enter the month via a text box on an unbound form.
I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate
the
quarter based on the date that I supply in my text box. It works if
the
month is the first month in the quarter but if itâ€™s like Feb or
March,
it
returns the wrong amount. Can anyone help me fix this so that it
pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between
([Forms]![frmVarianceQtr]![txtMo1])
And

TransDate is in datetime mm/dd/yyyy format

I appreciate any help!

A

#### AccessKay

I got it! Well actually you got it and I just found out how to use it.

AccessKay said:
I appreciate you explaining this. It helped a little to understand what
these statements mean but Iâ€™m not clear about the last part regarding the
WHERE statement. I think youâ€™re saying that if you have a WHERE clause in
front of the IIF statement, then some action happens firstâ€¦but then I get
lost. I donâ€™t have a WHERE but I do have a SUM. I think I need a -1 after
the YEARâ€¦as you indicated. That will give me 2009 but Iâ€™m wondering why it
gave me QTR4. Actually, I just tested by putting a 2009 date into the
textbox and now itâ€™s not returning any records at all (2010 dates work fine).
Yikes!!! Iâ€™m so confused.

vanderghast said:
Have you applied the -1 to the Year( ) ? (or to the quarter, Datepart("q",
... ) ) .

As example, if FORMS!frmVarianceQtr!txtMo1 holds the value 2010.05.02, then

YEAR(FORMS!frmVarianceQtr!txtMo1) would be 2010

DatePart("q", CDate(FORMS!frmVarianceQtr!TxtMo1 )) will be 2,

and finally, the comparison will be (when all constants are finally fully
evaluated) :

iif( Year(transDate) = 2009 AND DatePart("q", transDate) = 2,
ODC_cost, 0 )

so the data considered, inside the true part of that iif, would be from
records where transDate is in 2009, second quarter, Note that the WHERE
clause is applied BEFORE that iif is computed... So if there is a WHERE
clause, in your query, which removes all data from 2009, you will only get 0
from what if left, once it is time to evaluate that iif.

Vanderghast, Access MVP

AccessKay said:
This gave me the previous quarter but what I'm wanting is the previous
year's
quarter(e.g. Q1 of 2009). I tried working with it but I can't seem to get

Thank you again.

:

Either you change the value in

FORMS!frmVarianceQtr!txtMo1

to reflect a year in last date, either you subtract 1 from Year(
CDate(FORMS!frmVarianceQtr!txtMo1) )

to obtain:

iif(Year(transDate) = Year(CDate(FORMS!frmVarianceQtr!txtMo1)) -1
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

Vanderghast, Access MVP

This works...thankyou! I apologize for being greedy but how can I
change
this to show the previous year's quarter?

:

assuming you have a dateTime and not a string, you can change the
comparison
to test the year and the quarter:

iif( Year(transDate) = Year( CDate(FORMS!frmVarianceQtr!txtMo1) )
AND DatePart("q", transDate) = DatePart("q",
CDate(FORMS!frmVarianceQtr!TxtMo1 )) ,

ODC_cost,

0 )

You could also have tested:

iif( Format( transDate, "yyyyq") = Format( CDate(
FORMS!frmVarianceQtr!txtMo1 ), "yyyyq"),
ODC_cost,
0)

but using strings is generally slower.

Vanderghast, Access MVP

I have this expression in a calculated field in my query and it works
fine
for the month. I enter the month via a text box on an unbound form.
I
thought that if I changed the â€œmâ€ to a â€œqâ€ that it would calculate
the
quarter based on the date that I supply in my text box. It works if
the
month is the first month in the quarter but if itâ€™s like Feb or
March,
it
returns the wrong amount. Can anyone help me fix this so that it
pulls
the
correct quarter total?

Qtr_1: Sum(IIf([TransDate] Between
([Forms]![frmVarianceQtr]![txtMo1])
And