<preamble>

When using <loop mode_="concat">, the query code for each iteration of the <inner> clause is concatenated into a single query. The contents of a <preamble> clause are prepended to the concatenated code before the query is executed.

Syntax

<loop with_="[ARBITRARY_VARIABLE_NAME]">
  <outer>
    [1010data_QUERY]
  </outer>
  <preamble>
    [1010data_QUERY]
  </preamble>
  <inner>
    [1010data_QUERY]
  </inner>
</loop>

Example

In the following example, the <preamble> clause performs a tabulation on the table pub.demo.retail.prod grouping on the sku column. This query code is prepended to the two <link> operations resulting from the two iterations of the <inner> corresponding to the rows in the table from the <outer> query. The resultant code is then executed.

<loop with_="rpt" mode_="concat">
  <outer>
    <table cols="start,end,period">
      20120515,20120602,1;
      20120603,20120619,2;
    </table>
  </outer>
  <preamble>
    <base table="pub.demo.retail.prod"/>
    <tabu label="Sample Report" breaks="sku"/>
  </preamble>
  <inner>
    <link table2="pub.demo.retail.item" col="sku">
      <sel value="between(date;{@rpt.start};{@rpt.end})"/>
      <tabu breaks="sku">
        <tcol fun="sum" source="sales" name="sales_{@rpt.period}" 
         label="Sales`[{format(@rpt.start;'type:date')} - {format(@rpt.end;'type:date')}]"/>
      </tabu>
    </link>
  </inner>
</loop>

This results in the following code:

<base table="pub.demo.retail.prod"/>
<tabu label="Sample Report" breaks="sku"/>
<link table2="pub.demo.retail.item" col="sku">
  <sel value="between(date;20120515;20120602)"/>
  <tabu breaks="sku">
    <tcol fun="sum" source="sales" name="sales_1" 
     label="Sales`[{format(20120515;'type:date')} - {format(20120602;'type:date')}]"/>
  </tabu>
</link>
<link table2="pub.demo.retail.item" col="sku">
  <sel value="between(date;20120603;20120619)"/>
  <tabu breaks="sku">
    <tcol fun="sum" source="sales" name="sales_2" 
     label="Sales`[{format(20120603;'type:date')} - {format(20120619;'type:date')}]"/>
  </tabu>
</link>

Note that the results would be different if the operations from the <preamble> were included in the <inner> clause instead.

<loop with_="rpt" mode_="concat">
  <outer>
    <table cols="start,end,period">
      20120515,20120602,1;
      20120603,20120619,2;
    </table>
  </outer>
  <inner>
    <base table="pub.demo.retail.prod"/>
    <tabu label="Sample Report" breaks="sku"/>
    <link table2="pub.demo.retail.item" col="sku">
      <sel value="between(date;{@rpt.start};{@rpt.end})"/>
      <tabu breaks="sku">
        <tcol fun="sum" source="sales" name="sales_{@rpt.period}" 
         label="Sales`[{format(@rpt.start;'type:date')} - {format(@rpt.end;'type:date')}]"/>
      </tabu>
    </link>
  </inner>
</loop>

Each iteration of the <inner> clause would result in query code that consisted of a <base>, a <tabu>, and a <link> operation. The concatenated code would result in the following code:

<base table="pub.demo.retail.prod"/>
<tabu label="Sample Report" breaks="sku"/>
<link table2="pub.demo.retail.item" col="sku">
  <sel value="between(date;20120515;20120602)"/>
  <tabu breaks="sku">
    <tcol fun="sum" source="sales" name="sales_1" 
     label="Sales`[{format(20120515;'type:date')} - {format(20120602;'type:date')}]"/>
  </tabu>
</link>
<base table="pub.demo.retail.prod"/>
<tabu label="Sample Report" breaks="sku"/>
<link table2="pub.demo.retail.item" col="sku">
  <sel value="between(date;20120603;20120619)"/>
  <tabu breaks="sku">
    <tcol fun="sum" source="sales" name="sales_2" 
     label="Sales`[{format(20120603;'type:date')} - {format(20120619;'type:date')}]"/>
  </tabu>
</link>

When this code is executed, the results would only include the operations after the second base tag, since any tags before a <base> tag are ignored. For more information, see <base>.