LDCX Evaluation for ESWC 2014 Demo

From www.b-kaempgen.de
Jump to: navigation, search

On this page, we describe an evaluation not considering drill-across of the Linked Data Cubes Explorer (LDCX).

We want to show that we successfully applied the Linked Data Cubes Explorer (LDCX). For that, we first describe a user study to evaluate the usability and use- fulness of LDCX. Then we describe a performance evaluation to gain an understanding of possible performance bottlenecks of LDCX.

To confirm the usefulness of LDCX and olap4ld, we have put LDCX online and have asked 20 business engineering students at KIT to fill in an online questionnaire ( see at [1] and below) that is inspired by the Computer System Usability Questionnaire (CSUQ) (James R. Lewis. IBM computer usability satisfaction questionnaires: psychometric evaluation and instructions for use. Int. J. Hum.-Comput. Interact., 1995.). With part 1, a set of tasks that students had to solve using the system, we want to investigate whether participants can successfully solve tasks and ensure that participants use all functionality of LDCX. With part 2, a set of statements for which students had to indicate how strongly they agree or disagree, we intend to assess the usability of LDCX and identify potential usability issues.

We have only used 11 -- from 19 of the original CSUQ -- questions most relevant to our system. For instance, we felt the results from the question "The interface of this system is pleasant." already be covered by other questions and the question "The information is effective in helping me complete my work." to not fit the evaluation's context of having students complete tasks that they normally would not execute. Having a reduced amount of questions and participants not experienced or familiar with the type of tasks is a limitation to our evaluation; still, as a tool targeting citizens for exploring Governmental Statistics, we expect the results give an impression of the usability and usefulness of LDCX.

User Study

Part 1: TASKS

Before making LDCX as well as the questionnaire available for the wider public (e.g., announcing the demo at the GLD Working Group and the Publishing Statistical Data Google Group) 8 students have taken part in the evaluation. According to the results of the first part of the evaluation, overall, students were able to fulfil the tasks. All students were able to understand the three-step interface and the visualisation as pivot tables (Task 1, 2, 3, 4, 8); selecting datasets (Task 5, 8, 9, 10); projection (Task 1, 7); and slice (Task 5, 6, 7). For Task 8, 10, 11, two students missed to further drill-down to specific stock market and balance sheet values which probably was because the respective dimensions were not labelled intuitively. For the more complex Task 10 and 11, three students did not wait long enough for the answers. Only one participant could name the failed integrity constraint in Task 9, all others only noticed the general error message. This was expected since those students were not involved in publishing QB datasets.

Part 2: FEEDBACK

The second part of the user study evaluation gave a more detailed idea of how usable the students found LDCX: We computed an overall CSUQ score by averaging over all answers. An overall score of 2.5 shows that students were satisfied with LDCX. Students mentioned that they understood the three-step interface within minutes and found the system easy to use. Worst scores are given in questions related to error messages (Feedback 6) and performance of the system (Feedback 3 and 10). Also, apparently, the search for datasets can be improved: students sometimes chose the wrong dataset (Task 9) and complained about the copy-paste needed to select a dataset. In summary, the system seems usable and robust; improvements are possible regarding the performance, error messages and selection of datasets.

Questionnaire

-----------------------
Thank you for helping us improve the Linked Data Cubes Explorer (LDCX), a new analysis tool for statistical data.
Please return your answers by simply filling in this form. You can use English or German.

BACKGROUND INFO
------------------------------------------
What is it about? We want to have your opinion about a new analysis tool for statistical data: Linked Data Cubes Explorer (LDCX). Therefore, we would like you to use our tool for some statistical data analysis tasks and to tell us your experiences.

What do you need to participate? You need an internet connection and a Firefox or Chrome browser.

What do you have to do? There are a couple of tasks to solve. Please enter your answers right after each question. You can also give a comment. Afterwards, you can give feedback about the system.

How long will it take? Solving the tasks should not take longer than 30 minutes, probably you will finish much earlier. Giving feedback may take 3 minutes but you can take all the time you want.

Until when are your answers needed? The earlier, the better. We would like to open up the system to the public as soon as possible. However, if you do not find the time to spend 30 minutes in the next days, no problem. Hand in your answers any time you like.

What happens with your answers? Your responses help us improve our LDCX system. All answers and responses will be handled confidentially and anonymously at all times.

START
------------------------------------------
Please open the following website in your Firefox or Chrome browser and fill in the tasks and feedback statements on the next pages of this form:

http://www.ldcx.linked-data-cubes.org:8000/ldcx-trunk/ldcx/ld-cubes-explorer.html

TASKS

------------------------------------------

Please do the following tasks in turn. Simply state your answer below a task:

Task 1) Name two measures that the "Example SSB dataset" contains.

Task 2) What overall revenue was made by "Customer 2" in the "Example SSB dataset"?

Task 3) Has there been any revenue from Product "Part 2" in the "Example SSB dataset"?

Task 4) From what Date is the revenue of Product "Part 1" in the "Example SSB dataset"?

Task 5) What was the average GDP per capita in PPS for Germany?

Task 6) What was the average GDP per capita in PPS for Germany in 2012?

Task 7) How many values does the dataset for GDP per capita in PPS have for 2012?

Task 8) What was the average Stock Market "Adjusted Closing Price" for Bank of America Corporation on 12 December 2012?

Task 9) What does the system tell you about dataset "HCO3 climate data at location AD0514"? (Hint: The dataset is not modelled correctly)

Task 10) What is the overall average "Available for sale securities noncurrent" in Balance Sheet for COSTCO WHOLESALE CORP, published on 2010-08-29?

Task 11) What were the "Available for sale securities gross realized losses" between 2009-08-31 and 2010-08-29 for COSTCO WHOLESALE CORP?

FEEDBACK

------------------------------------------

Please give your opinions on the following feedback statements:

Simply name the number.

Whenever it is appropriate, please write comments to explain your answers.

Feedback 1) Overall, I am satisfied with how easy it is to use this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 2) It is simple to use this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 3) I can complete the given tasks quickly using this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 4) I feel comfortable using this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 5) It was easy to learn to use this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 6) The system gives error messages that clearly tell me how to fix problems.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 7) Whenever I make a mistake using the system, I recover easily and quickly.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 8) The information (such as on-line help, on-screen messages and other documentation) provided with this system is sufficient.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 9) The organization of information on the system screens is clear.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Note: The interface includes those items that you use to interact with the system. For example, some components of the interface are the keyboard, the mouse, the screens (including their use of graphics and language).

Feedback 10) The interface of this system is sufficiently fast.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 11) I like using the interface of this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 12) This system has all the functions and capabilities I expect it to have.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Feedback 13) Overall, I am satisfied with this system.

STRONGLY AGREE 1 2 3 4 5 6 7 STRONGLY DISAGREE

COMMENTS:

Please give some general comments: Have you had problems? Would you use this tool later?

GENERAL FEEDBACK AND COMMENTS:

--------------------------------

Summary of Results

Performance Evaluation

Since performance of OLAP systems is crucial, we investigated possible bottlenecks of LDCX and olap4ld in a performance evaluation. We log elapsed query times in ms per query processing step for a specific workload and compute the average over 5 runs of the same query after a warm-up.

More concretely, we are interested in the time 1) for loading and validating a dataset (load URIs, run normalisation, run integrity constraints), 2) generating a logical query plan (parse MDX, transform MDX parse tree and run metadata queries after loading dataset) and 3) executing the logical query plan and returning the results in the Linked Data Engine (generating and executing physical query plan, caching results). Since we intend to evaluate olap4ld, we do not investigate the time it takes the clients xmla4js and olap4j-xmlaserver to issue queries and process the results.

The workload includes 1) all datasets from the user study to consider differently sized (from around 100 to 10,000 triples and 10 to 1000 observations) and distributed (static or dynamically created files) datasets and 2) for each dataset a slice and drill down query testing the performance of the system regarding different aggregation levels. For every slice query, a pivot table was queried that shows the first dimension on the rows, all measures on the columns, and slices all other dimensions; for every drill down query, a pivot table was queried that uses a crossjoin of all dimensions on the rows and all measures on the columns.

We run the experiments from a Java test case issuing XMLA queries directly on the LDCX XMLA server deployed on a VM in an OpenNebula framework with QEMU Virtual CPU version 0.9.1; 1x CPU with 2266.808 MHz; 32 KB cache size; and 4GB Memory. We used Tomcat 6 with no specific setup.

Catalina bigger 5 runs test including slice 2013-10-22 v4.png

As expected, we see that dynamically generated datasets (Yahoo, Smart) take much longer to load and validate than static datasets (Ssb, Eurostat, Edgar). For the static datasets loading and validating increases with the size of the dataset. Because of a large number of metadata queries, the larger datasets take more time to generate the query plan. Those many metadata queries to the Linked Data Engine are needed to search for the multidimensional element of an identifier in the MDX query. To overcome this bottleneck, we could include path information in identifiers to faster retrieve an element from the multidimensional model. Executing the query plan requires an OLAP query to the Linked Data Engine which takes longer for larger datasets (Eurostat, Edgar). We note that aggregated slice queries take less time for executing the query plan which may be because they require to transmit and cache fewer results. Also, we note that slice queries always take more time for loading and validating the dataset, although both slice and drill down query load the same QB dataset. The server (Google) from where the datasets are loaded seems to return results faster if asked in short intervals repeatedly for the same data. The Edgar slice query takes more than 20,000ms, mainly for loading; to make the other bars more visible in the diagram, we have fixed the y-axis to 8,000ms. In summary, the main bottlenecks lie in loading the dataset and (a lot less) in many metadata queries needed to identify elements in queries.

Implementation

Datasets

Workload

  • Yahoo Slice
SELECT /* $session: ldcx_performance_evaluation_testYahooFinance_Slice */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY {Members([httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FdcXXX2FtermsXXX2Fdate])} ON ROWS 

FROM [httpXXX3AXXX2FXXX2FyahoofinancewrapYYYappspotYYYcomXXX2FarchiveXXX2FBACXXX2F2012ZZZ12ZZZ12XXX23ds]

  • Yahoo DrillDown
SELECT /* $session: ldcx_performance_evaluation_testYahooFinance_DrillDown */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY CrossJoin({Members([httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FdcXXX2FtermsXXX2Fdate])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FyahoofinancewrapYYYappspotYYYcomXXX2FvocabXXX2FyahooXXX23issuer])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FyahoofinancewrapYYYappspotYYYcomXXX2FvocabXXX2FyahooXXX23segment])}, {Members([httpXXX3AXXX2FXXX2FyahoofinancewrapYYYappspotYYYcomXXX2FvocabXXX2FyahooXXX23subject])}))) ON ROWS 

FROM [httpXXX3AXXX2FXXX2FyahoofinancewrapYYYappspotYYYcomXXX2FarchiveXXX2FBACXXX2F2012ZZZ12ZZZ12XXX23ds]
  • SSB Slice
SELECT /* $session: ldcx_performance_evaluation_testSsb_Slice */ 

NON EMPTY {[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_discount],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_extendedprice],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_quantity],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_revenue],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_supplycost]} ON COLUMNS, 

NON EMPTY {Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_custkeyCodeList])} ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23ds]
  • SSB DrillDown
SELECT /* $session: ldcx_performance_evaluation_testSsb_DrillDown */ 

NON EMPTY {[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_discount],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_extendedprice],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_quantity],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_revenue],[httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_supplycost]} ON COLUMNS, 

NON EMPTY CrossJoin({Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_custkeyCodeList])}, CrossJoin({Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_orderdateCodeList])}, CrossJoin({Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_partkeyCodeList])}, {Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23lo_suppkeyCodeList])}))) ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2Fssb001XXX2FttlXXX2FexampleYYYttlXXX23ds]
  • SMART Slice
SELECT /* $session: ldcx_performance_evaluation_testSmart_Slice */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FobsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FobsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY {Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fanalysis_Object])} ON ROWS 

FROM [httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FidXXX2FlocationdatasetXXX2FAD0514XXX2FQ]
  • SMART DrillDown
SELECT /* $session: ldcx_performance_evaluation_testSmart_DrillDown */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FobsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FobsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY CrossJoin({Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fanalysis_Object])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fday])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Flocation])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fmonth])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fstudy_Area])}, {Members([httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2Fyear])}))))) ON ROWS 

FROM [httpXXX3AXXX2FXXX2FsmartdbwrapYYYappspotYYYcomXXX2FidXXX2FlocationdatasetXXX2FAD0514XXX2FQ]
  • Eurostat Slice
SELECT /* $session: ldcx_performance_evaluation_testEurostatEmploymentRateBySex_Slice */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FontologycentralYYYcomXXX2F2009XXX2F01XXX2FeurostatXXX2FnsXXX23employment_rate]} ON COLUMNS, 

NON EMPTY {Members([httpXXX3AXXX2FXXX2FontologycentralYYYcomXXX2F2009XXX2F01XXX2FeurostatXXX2FnsXXX23geo])} ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2FestatwrapXXX2Ftsdec420_dsYYYrdfXXX23ds]
  • Eurostat DrillDown
SELECT /* $session: ldcx_performance_evaluation_testEurostatEmploymentRateBySex_DrillDown */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FontologycentralYYYcomXXX2F2009XXX2F01XXX2FeurostatXXX2FnsXXX23employment_rate]} ON COLUMNS, 

NON EMPTY CrossJoin({Members([httpXXX3AXXX2FXXX2FontologycentralYYYcomXXX2F2009XXX2F01XXX2FeurostatXXX2FnsXXX23geo])}, CrossJoin({Members([httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2FestatwrapXXX2Ftsdec420_dsdYYYrdfXXX23cl_sex])}, {Members([httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FdcXXX2FtermsXXX2Fdate])})) ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2FestatwrapXXX2Ftsdec420_dsYYYrdfXXX23ds]
  • Edgar Slice
SELECT /* $session: ldcx_performance_evaluation_testEdgarCostco_Slice */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY {Members([httpXXX3AXXX2FXXX2FedgarwrapYYYontologycentralYYYcomXXX2FvocabXXX2FedgarXXX23issuer])} ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2FedgarwrapXXX2F0001193125ZZZ10ZZZ230379YYYrdfXXX23ds]
  • Edgar DrillDown
SELECT /* $session: ldcx_performance_evaluation_testEdgarCostco_DrillDown */ 

NON EMPTY {[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCAVG],[httpXXX3AXXX2FXXX2FpurlYYYorgXXX2FlinkedZZZdataXXX2FsdmxXXX2F2009XXX2FmeasureXXX23obsValueAGGFUNCCOUNT]} ON COLUMNS, 

NON EMPTY CrossJoin({Members([httpXXX3AXXX2FXXX2FedgarwrapYYYontologycentralYYYcomXXX2FvocabXXX2FedgarXXX23issuer])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FedgarwrapYYYontologycentralYYYcomXXX2FvocabXXX2FedgarXXX23subject])}, CrossJoin({Members([httpXXX3AXXX2FXXX2FwwwYYYw3YYYorgXXX2F2002XXX2F12XXX2FcalXXX2FicalXXX23dtend])}, {Members([httpXXX3AXXX2FXXX2FwwwYYYw3YYYorgXXX2F2002XXX2F12XXX2FcalXXX2FicalXXX23dtstart])}))) ON ROWS 

FROM [httpXXX3AXXX2FXXX2Folap4ldYYYgooglecodeYYYcomXXX2FgitXXX2FOLAP4LDZZZtrunkXXX2FtestsXXX2FedgarwrapXXX2F0001193125ZZZ10ZZZ230379YYYrdfXXX23ds]