Cognos Analytics リストとクロス集計の枠固定JavaScript

#概要
Cognos Analyticsの完全な相互作用モードで、リストやクロス集計の枠固定(Header Freeze)を実装するJavaScriptの説明です。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/31bad9fd-9b51-248a-67df-e76f1a5279f3.png)

#内容
リンクだけなのですが、Youtube上に実装方法が説明された動画があります。
**IBM Cognos Analytics - Custom JavaScript Controls - Freeze Columns**
https://www.youtube.com/watch?v=kzStfI59Gj0

実際のJavaScriptサンプルソースは、以下のリンクから here をクリックして頂くと、ソース置き場に辿り着きます。
https://www.ibm.com/developerworks/community/blogs/b4a2eef5-e39f-45c7-8d10-29eb159a398b/entry/IBM_Cognos_Analytics_Custom_JavaScript_Controls_Freeze_Columns?lang=en

枠固定は非常に要件の多い実装なので、情報共有として投稿しておきます。

#JavaScriptファイルとレポートスペック(2021/11/17追記)
前述のリンクが切れていて、ソースの取得が出来ないようなので、こちらにファイルの中身を貼っておきます。
Cognos Analytics 11.2.1でも動作する事を確認しました。

**FreezeColumns.js**

```html
define(["jquery"], function ($) {
    "use strict";

    /*
    NOTES:
        Date Last Updated: 1/30/2017
        Author: Jeff Martin
        Usage: Custom control used to freeze columns when scrolling.  Designed for lists, but will work with crosstab unless there
        are nested items in the Rows drop zone.
        Here is a sample config object:
            {
                "controlName":"List1",
                "block":"Block1",
                "columnsToFreeze": 1
            }
            
       */

    function FreezeColumns() {
    };

    FreezeColumns.prototype.draw = function (oControlHost) {

        //variable to reference the json config
        var conf = oControlHost.configuration;
        //check for config
        if (!conf) {
            throw new scriptableReportError("FreezeColumns", "draw method", "Missing configuration.");
        }

        //We know there is a config object so we check to make sure it has the required properties.
        if (!(conf.hasOwnProperty("controlName") && conf.hasOwnProperty("block"))) {
            throw new scriptableReportError("FreezeColumns", "draw method",
                "Configuration object needs at least one property (controlName;block)");
        }

        //Config is good so we move on.
        //get control id so the wrapper is unique if contorl is used multiple times on a page.
        var uniqueId = oControlHost.page.getControlByName(conf.controlName).element.id;

        //jquery references to target control and custom control
        var control = $("#" + uniqueId);
        var container = $("#" + oControlHost.container.id);

        //get wrapper div width
        var freezeWidth =
            this.calculateWidth((!conf.columnsToFreeze ? 1 : conf.columnsToFreeze), control);

        //add div to hold our control and enable the freezing
        container.append("<div id='" + uniqueId + "freezeWrapper' style='overflow-x:hidden;background-color:white'></div>");

        //add local variables for the new divs
        var freezeDiv = $("#" + uniqueId + "freezeWrapper");

        //overlay freezeDiv on the block
        var block = oControlHost.page.getControlByName(conf.block).element.id;
        freezeDiv.offset($("#" + block).offset());

        //set width
        freezeDiv.css("width", freezeWidth);

        //clone control into the freezeDiv that has been sized and clipped
        freezeDiv.append(control.clone());

        //make sure custom control doesn't take up space
        $("[specname='customControl']").css("height", 0);

    };

    FreezeColumns.prototype.calculateWidth = function (numFields, ctrl) {

        var calculatedWidth = 0;

        for (var i = 0; i < numFields; i++) {
            calculatedWidth += ctrl.find("td").eq(i).outerWidth() + 1  /*assumes default borders*/;
        };

        return calculatedWidth;
    };

    return FreezeColumns;
});
```

**レポートスペック**

```html
<report xmlns="http://developer.cognos.com/schemas/report/13.3/"           expressionLocale="en" useStyleVersion="11.4">
				
				<drillBehavior/>
				
				<layouts>
					<layout>
						<reportPages>
							<page name="Page1"><style><defaultStyles><defaultStyle refStyle="pg"/></defaultStyles></style>
								<pageBody><style><defaultStyles><defaultStyle refStyle="pb"/></defaultStyles><CSS value="text-align:center"/></style>
									<contents>
										
									<table><style><defaultStyles><defaultStyle refStyle="tb"/></defaultStyles><CSS value="border-collapse:collapse;width:100%"/></style><tableRows><tableRow><tableCells><tableCell><contents><block>
			<contents><textItem><dataSource><staticValue>List - Freeze 1 Column</staticValue></dataSource></textItem></contents>
		<style><CSS value="font-weight:bold"/></style></block><block name="Block1">
			<contents><list horizontalPagination="true" name="List1" refQuery="Query1">
			
			
			
			<noDataHandler>
				<contents>
					<block>
						<contents>
							<textItem>
								<dataSource>
									<staticValue>No Data Available</staticValue>
								</dataSource>
								<style>
									<CSS value="padding:10px 18px;"/>
								</style>
							</textItem>
						</contents>
					</block>
				</contents>
			</noDataHandler>
			<style>
				<CSS value="border-collapse:collapse;width:1000px"/>
				<defaultStyles>
					<defaultStyle refStyle="ls"/>
				</defaultStyles>
			</style>
		<listColumns><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Product line"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lc"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Product line"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Quantity"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Quantity"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Unit cost"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Unit cost"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Unit price"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Unit price"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Unit sale price"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Unit sale price"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Revenue"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Revenue"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Product cost"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Product cost"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Gross profit"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Gross profit"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Planned revenue"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Planned revenue"/></dataSource></textItem></contents></listColumnBody></listColumn></listColumns><listOverallGroup><listFooter><listRows><listRow><rowCells><rowCell><contents><textItem><dataSource><staticValue>Overall</staticValue></dataSource></textItem><textItem><dataSource><staticValue> - </staticValue></dataSource></textItem><textItem><dataSource><staticValue>Summary</staticValue></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="if"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Quantity)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Unit cost)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Unit price)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Unit sale price)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Revenue)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Product cost)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Gross profit)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Planned revenue)"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell></rowCells></listRow></listRows></listFooter></listOverallGroup></list></contents>
		<style><CSS value="width:743px;overflow:auto;border:1pt solid silver"/></style></block><customControl path="../samples/javascript/FreezeColumns/FreezeColumns"><configuration>{
    &quot;controlName&quot;: &quot;List1&quot;,
    &quot;block&quot;: &quot;Block1&quot;
}</configuration></customControl></contents><style><CSS value="text-align:center"/></style></tableCell></tableCells></tableRow><tableRow><tableCells><tableCell><contents><block>
			<contents><textItem><dataSource><staticValue>List - Freeze 2 Columns</staticValue></dataSource></textItem></contents>
		<style><CSS value="font-weight:bold"/></style></block><block name="Block2">
			<contents><list horizontalPagination="true" name="List2" refQuery="Query1">
			
			
			
			<noDataHandler>
				<contents>
					<block>
						<contents>
							<textItem>
								<dataSource>
									<staticValue>No Data Available</staticValue>
								</dataSource>
								<style>
									<CSS value="padding:10px 18px;"/>
								</style>
							</textItem>
						</contents>
					</block>
				</contents>
			</noDataHandler>
			<style>
				<CSS value="border-collapse:collapse;width:1000px"/>
				<defaultStyles>
					<defaultStyle refStyle="ls"/>
				</defaultStyles>
			</style>
		<listColumns><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Product line"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lc"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Product line"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Year"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lc"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Year"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Quantity"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Quantity"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Unit cost"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Unit cost"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Unit price"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Unit price"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Revenue"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Revenue"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Product cost"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Product cost"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Gross profit"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Gross profit"/></dataSource></textItem></contents></listColumnBody></listColumn><listColumn><listColumnTitle><style><defaultStyles><defaultStyle refStyle="lt"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Planned revenue"/></dataSource></textItem></contents></listColumnTitle><listColumnBody><style><defaultStyles><defaultStyle refStyle="lm"/></defaultStyles></style><contents><textItem><dataSource><dataItemValue refDataItem="Planned revenue"/></dataSource></textItem></contents></listColumnBody></listColumn></listColumns><sortList><sortItem sortOrder="descending" refDataItem="Year"/></sortList><listOverallGroup><listFooter><listRows><listRow><rowCells><rowCell colSpan="2"><contents><textItem><dataSource><staticValue>Overall</staticValue></dataSource></textItem><textItem><dataSource><staticValue> - </staticValue></dataSource></textItem><textItem><dataSource><staticValue>Summary</staticValue></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="if"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Quantity)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Unit cost)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Unit price)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Revenue)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Product cost)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Gross profit)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell><rowCell><contents><textItem><dataSource><dataItemValue refDataItem="Summary(Planned revenue)1"/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="is"/></defaultStyles></style></rowCell></rowCells></listRow></listRows></listFooter></listOverallGroup></list></contents>
		<style><CSS value="width:743px;overflow:auto;border:1pt solid silver"/></style></block><customControl path="../samples/javascript/FreezeColumns/FreezeColumns"><configuration>{
    &quot;controlName&quot;: &quot;List2&quot;,
    &quot;block&quot;: &quot;Block2&quot;,
    &quot;columnsToFreeze&quot;: 2
}</configuration></customControl></contents><style><CSS value="padding-top:10px;padding-bottom:10px;text-align:center"/></style></tableCell></tableCells></tableRow><tableRow><tableCells><tableCell><contents><block>
			<contents><textItem><dataSource><staticValue>Crosstab - Freeze Rows Dropzone (not nested)</staticValue></dataSource></textItem></contents>
		<style><CSS value="font-weight:bold"/></style></block><block name="Block3">
			<contents><crosstab horizontalPagination="true" name="Crosstab1" refQuery="Query1">
			<crosstabCorner>
				<contents/>
				<style>
					<defaultStyles>
						<defaultStyle refStyle="xm"/>
					</defaultStyles>
				</style>
			</crosstabCorner>
			
			
			<noDataHandler>
				<contents>
					<block>
						<contents>
							<textItem>
								<dataSource>
									<staticValue>No Data Available</staticValue>
								</dataSource>
								<style>
									<CSS value="padding:10px 18px;"/>
								</style>
							</textItem>
						</contents>
					</block>
				</contents>
			</noDataHandler>
			<style>
				<CSS value="border-collapse:collapse;width:1000px"/>
				<defaultStyles>
					<defaultStyle refStyle="xt"/>
				</defaultStyles>
			</style>
		<crosstabRows><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Product line" edgeLocation="e1"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Summary(Product line)" edgeLocation="e10"><style><defaultStyles><defaultStyle refStyle="ol"/></defaultStyles></style><contents><textItem><dataSource><dataItemLabel refDataItem="Summary(Product line)"/></dataSource></textItem></contents><factCell><style><defaultStyles><defaultStyle refStyle="ov"/></defaultStyles></style></factCell></crosstabNodeMember></crosstabNodeMembers></crosstabNode></crosstabRows><crosstabFactCell><contents><textItem><dataSource><cellValue/></dataSource></textItem></contents><style><defaultStyles><defaultStyle refStyle="mv"/></defaultStyles></style></crosstabFactCell><crosstabColumns><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Quantity" edgeLocation="e2"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Unit cost" edgeLocation="e3"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Unit price" edgeLocation="e4"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Unit sale price" edgeLocation="e5"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Revenue" edgeLocation="e6"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Product cost" edgeLocation="e7"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Gross profit" edgeLocation="e8"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode><crosstabNode><crosstabNodeMembers><crosstabNodeMember refDataItem="Planned revenue" edgeLocation="e9"><style><defaultStyles><defaultStyle refStyle="ml"/></defaultStyles></style><contents><textItem><dataSource><memberCaption/></dataSource></textItem></contents></crosstabNodeMember></crosstabNodeMembers></crosstabNode></crosstabColumns></crosstab></contents>
		<style><CSS value="width:743px;overflow:auto;border:1pt solid silver"/></style></block><customControl path="../samples/javascript/FreezeColumns/FreezeColumns"><configuration>{
    &quot;controlName&quot;: &quot;Crosstab1&quot;,
    &quot;block&quot;: &quot;Block3&quot;
}</configuration></customControl></contents><style><CSS value="text-align:center"/></style></tableCell></tableCells></tableRow></tableRows></table></contents>
								</pageBody>
								
								<pageFooter>
									<contents>
										<table>
											<tableRows>
												<tableRow>
													<tableCells>
														<tableCell>
															<contents>
																<date>
																	<style>
																		<dataFormat>
																			<dateFormat/>
																		</dataFormat>
																	</style>
																</date>
															</contents>
															<style>
																<CSS value="width:25%;text-align:left;vertical-align:top"/>
															<defaultStyles><defaultStyle refStyle="FooterDateTableCell"/></defaultStyles></style>
														</tableCell>
														<tableCell>
															<contents>
																<pageNumber/>
															</contents>
															<style>
																<CSS value="width:50%;text-align:center;vertical-align:top"/>
															<defaultStyles><defaultStyle refStyle="FooterPageNumberTableCell"/></defaultStyles></style>
														</tableCell>
														<tableCell>
															<contents>
																<time>
																	<style>
																		<dataFormat>
																			<timeFormat/>
																		</dataFormat>
																	</style>
																</time>
															</contents>
															<style>
																<CSS value="width:25%;text-align:right;vertical-align:top"/>
															<defaultStyles><defaultStyle refStyle="FooterTimeTableCell"/></defaultStyles></style>
														</tableCell>
													</tableCells>
												</tableRow>
											</tableRows>
											<style>
												<defaultStyles>
													<defaultStyle refStyle="tb"/>
												</defaultStyles>
												<CSS value="width:100%;border-collapse:collapse;border-spacing:0px"/>
											</style>
										</table>
									</contents>
									<style>
										
										<CSS value="padding:10px"/>
									<defaultStyles><defaultStyle refStyle="FooterPageFooter"/></defaultStyles></style>
								</pageFooter>
							<pageHeader><contents><block>
			<contents><textItem><dataSource><staticValue>Freeze Columns - Custom JavaScript Control</staticValue></dataSource></textItem></contents>
		<style><defaultStyles><defaultStyle refStyle="HeaderReportTitleTableCell"/></defaultStyles><CSS value="text-align:center;font-size:20pt;font-weight:bold;border-bottom:1pt solid silver"/></style></block></contents><style><defaultStyles><defaultStyle refStyle="ph"/></defaultStyles></style></pageHeader></page>
						</reportPages>
					</layout>
				</layouts>
			<XMLAttributes><XMLAttribute name="RS_CreateExtendedDataItems" output="no" value="true"/><XMLAttribute output="no" name="listSeparator" value=","/><XMLAttribute output="no" name="RS_modelModificationTime" value="2015-11-25T21:38:24.820Z"/></XMLAttributes><queries><query name="Query1"><source><model/></source><selection><dataItemListSummary refDataItem="Quantity" aggregateMethod="aggregate" name="Summary(Quantity)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Unit cost" aggregateMethod="aggregate" name="Summary(Unit cost)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Unit price" aggregateMethod="aggregate" name="Summary(Unit price)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Unit sale price" aggregateMethod="aggregate" name="Summary(Unit sale price)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Revenue" aggregateMethod="aggregate" name="Summary(Revenue)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Product cost" aggregateMethod="aggregate" name="Summary(Product cost)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Gross profit" aggregateMethod="aggregate" name="Summary(Gross profit)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Planned revenue" aggregateMethod="aggregate" name="Summary(Planned revenue)"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItem aggregate="none" rollupAggregate="none" name="Product line"><expression>[Sales (query)].[Products].[Product line]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="0"/></XMLAttributes></dataItem><dataItem aggregate="total" name="Quantity"><expression>[Sales (query)].[Sales].[Quantity]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem name="Unit cost"><expression>[Sales (query)].[Sales].[Unit cost]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem name="Unit price"><expression>[Sales (query)].[Sales].[Unit price]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem name="Unit sale price"><expression>[Sales (query)].[Sales].[Unit sale price]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem aggregate="total" name="Revenue"><expression>[Sales (query)].[Sales].[Revenue]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem aggregate="total" name="Product cost"><expression>[Sales (query)].[Sales].[Product cost]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem aggregate="total" name="Gross profit"><expression>[Sales (query)].[Sales].[Gross profit]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem aggregate="total" name="Planned revenue"><expression>[Sales (query)].[Sales].[Planned revenue]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/><XMLAttribute output="no" name="RS_dataUsage" value="2"/></XMLAttributes></dataItem><dataItem aggregate="none" rollupAggregate="none" name="Year"><expression>[Sales (query)].[Time].[Year]</expression><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="1"/><XMLAttribute output="no" name="RS_dataUsage" value="0"/></XMLAttributes></dataItem><dataItemListSummary refDataItem="Unit sale price" aggregateMethod="aggregate" name="Summary(Unit sale price)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Quantity" aggregateMethod="aggregate" name="Summary(Quantity)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Unit cost" aggregateMethod="aggregate" name="Summary(Unit cost)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Unit price" aggregateMethod="aggregate" name="Summary(Unit price)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="9"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Revenue" aggregateMethod="aggregate" name="Summary(Revenue)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Product cost" aggregateMethod="aggregate" name="Summary(Product cost)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Gross profit" aggregateMethod="aggregate" name="Summary(Gross profit)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemListSummary refDataItem="Planned revenue" aggregateMethod="aggregate" name="Summary(Planned revenue)1"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="2"/></XMLAttributes></dataItemListSummary><dataItemEdgeSummary solveOrder="1" refDataItem="Product line" aggregateMethod="aggregate" name="Summary(Product line)" label="Summary"><XMLAttributes><XMLAttribute output="no" name="RS_dataType" value="3"/></XMLAttributes></dataItemEdgeSummary></selection><detailFilters><detailFilter><filterDefinition><filterInValues refDataItem="Year" dataType="integer"><filterValues><filterValue>2013</filterValue></filterValues></filterInValues></filterDefinition></detailFilter></detailFilters></query></queries><modelPath>/content/folder[@name=&apos;Samples&apos;]/folder[@name=&apos;Models&apos;]/package[@name=&apos;GO sales (query)&apos;]/model[@name=&apos;model&apos;]</modelPath><reportName>FreezeColumns</reportName></report>
```