Skip to main content

%DeepSee.Query.query

Class %DeepSee.Query.query Extends node [ System = 3 ]

This class holds run-time information for a DeepSee MDX statement and provides the machinery to prepare and execute it (via the %DeepSee.ResultSet interface.

Properties

cube

Property cube As %DeepSee.Datatype.string(XMLPROJECTION = "attribute");

Name of the cube this query is based on.
This is the FROM clause of the query.

queryType

Property queryType As %DeepSee.Datatype.string(VALUELIST = ",SELECT,DRILLTHROUGH,CREATE,DROP,%BITSET", XMLPROJECTION = "attribute") [ InitialExpression = "SELECT" ];

This indicates what type of MDX statement this is.

%target

Property %target As %DeepSee.Datatype.string(VALUELIST = ",SET,MEMBER", XMLPROJECTION = "none") [ Internal ];

For CREATE or DROP statements this specifies the target of the command.

%targetKey

Property %targetKey As %DeepSee.Datatype.string(XMLPROJECTION = "none") [ Internal ];

For DROP statements this specifies the key of the item to be dropped.

useCache

Property useCache As %Boolean(XMLPROJECTION = "attribute") [ InitialExpression = 1 ];

If true, then use results caching for this query.

%isCompound

Property %isCompound As %Boolean(XMLPROJECTION = "attribute") [ InitialExpression = 0 ];

If true, then this is a query on a compound cube.

%isCompoundMember

Property %isCompoundMember As %Boolean [ InitialExpression = 0 ];

If true, this query is being run as a subquery in a compound cube.

parentCube

Property parentCube As %String;

Contains the parent cube name if query is a member of a subquery.

%mustCompute

Property %mustCompute As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0, Internal ];

If true, then the query must be recomputed-- the cached results are not guaranteed to be up-to-date.

%recomputeAxes

Property %recomputeAxes As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0, Internal ];

If true, then the axes for the query must be recomputed.

%removeEmpty

Property %removeEmpty As %Boolean(XMLPROJECTION = "none") [ Internal, MultiDimensional ];

Indicates, by axis, if empty value needs to be removed after processing. This is used by compound queries.

recompute

Property recompute As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 1 ];

If true recompute previously run queries whose data has been updated. otherwise return old values.

useAgents

Property useAgents As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0 ];

If true, execute using background agents.
This is set when using async mode.

showPlan

Property showPlan As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0 ];

If true, execute this query in "plan" mode.

axes

Relationship axes As %DeepSee.Query.axis(XMLELEMENTREF = 1, XMLPROJECTION = "ELEMENT", XMLTYPECONSTRAINT = "CHOICE") [ Cardinality = many, Inverse = query ];

Axes defined for this query.

parentQueryKey

Property parentQueryKey As %String(XMLPROJECTION = "none");

For subqueries, remember which parent query initiated it.

parentWITHText

Property parentWITHText As %String(XMLPROJECTION = "none") [ Internal ];

Canonic form of WITH clause. Used internally to create hash keys.

subqueries

Property subqueries As list Of %DeepSee.ResultSet(XMLPROJECTION = "NONE");

Collection of all subqueries associated with this query.

slicer

Property slicer As %DeepSee.Query.axis(XMLPROJECTION = "ELEMENT");

Slicer defined for this query.
This is the WHERE clause of the query.
From a definition perspective this is no different than any other axis.

filters

Property filters As list Of %DeepSee.Query.axis(XMLPROJECTION = "ELEMENT");

Filter(s) defined for this query.
This is the ISC extension %FILTER clause of the query.

filterAxis

Property filterAxis As %DeepSee.Query.axis(XMLPROJECTION = "NONE");

Used to hold cube/subjectArea level filter.

measureAxis

Property measureAxis As %Integer [ InitialExpression = -1 ];

Used as an indicator as to which axis supplies the measure information for this query. The slicer is denoted by a 0, other axes are logged as their 1-based number. A value of -1 for this property indicates the default measure will be used.

%WITHText

Property %WITHText As %String(XMLPROJECTION = "none") [ Internal ];

Canonic form of WITH clause. Used internally to create hash keys.

namedSets

Property namedSets As array Of %DeepSee.Query.namedSet(XMLKEYNAME = "setName", XMLPROJECTION = "ELEMENT");

Collection of Named Sets defined within the WITH clause of the query.

calculatedMembers

Property calculatedMembers As array Of %DeepSee.Query.calculatedMember(XMLKEYNAME = "memberName", XMLPROJECTION = "ELEMENT");

Collection of Calculated Members defined within the WITH clause of the query. These are indexed by Dimension.MemberName.

%QueryKey

Property %QueryKey As %String(XMLPROJECTION = "none") [ Internal ];

Hash key used to address the results for this query. This allows a query to be prepared and later restored.

%Statistics

Property %Statistics As %DeepSee.Datatype.string [ Internal, MultiDimensional ];

Array of timing and performance statistics for this query.

%returnList

Property %returnList As %String(MAXLEN = 2000, XMLPROJECTION = "none") [ Internal ];

List of fields in RETURN clause for DRILLTHROUGH statement.

%orderList

Property %orderList As %String(MAXLEN = 2000, XMLPROJECTION = "none") [ Internal ];

List of fields in %ORDER BY clause for DRILLTHROUGH statement.

%listing

Property %listing As %String(MAXLEN = 255, XMLPROJECTION = "none") [ Internal ];

Name of listing specified by %LISTING statement in query.

%listingSource

Property %listingSource As %String(VALUELIST = "source,facts", XMLPROJECTION = "none") [ Internal ];

For a drillthrough, this indicates whether the listing query is against the source table or the fact table.

%NamedParameters

Property %NamedParameters As %String [ Internal, MultiDimensional ];

Array of named parameters with current values.

%ParameterValues

Property %ParameterValues As %String [ Internal, MultiDimensional ];

Array of named parameter values supplied when this query was executed.

%hasRelations

Property %hasRelations As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0, Internal ];

If true, this query contains references to related cubes.
This is set during the axis prepare phase.

%hasRelationship

Property %hasRelationship As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0, Internal ];

If true, this query contains references to related cubes.
Set during the parse phase, might replace %hasRelations.

%hasSqlRestrict

Property %hasSqlRestrict As %Boolean(XMLPROJECTION = "none") [ InitialExpression = 0, Internal ];

If true, this query contains an %SQLRESTRIICT statement.
Set during the parse phase.

%MaxListingRows

Property %MaxListingRows As %Integer [ InitialExpression = 1000, Internal ];

Maximum number of rows returned by a DRILLTHROUGH query. This is set by the MAXROWS directive within a DRILLTHROUGH query.

compoundQueries

Property compoundQueries As list Of %String(XMLPROJECTION = "NONE");

For queries on compound cubes, this is the set of keys for the subqueries that have to be executed and then joined.

compoundDrillthroughs

Property compoundDrillthroughs As list Of %String(XMLPROJECTION = "NONE");

For DRILLTHROUGH queries on compound cubes, this is the MDX DRILLTHROUGH statements for each leg of the compound query.

%originalAxisText

Property %originalAxisText As %String [ Internal, MultiDimensional ];

Original text for each axis. Used as part of the axis key.

%originalWITHContents

Property %originalWITHContents As %String;

Original components of the WITH clause. Order is not necessarily preserved from the original query text.

%variables

Property %variables As %String [ MultiDimensional ];

Current pivot variable settings for this query.

%LockKeys

Property %LockKeys As %String [ MultiDimensional ];

This holds a copy of all lock keys protecting this execution.

Methods

%QueryTrace

ClassMethod %QueryTrace(pMethod As %String, pCubeName As %String, pMessage As %String = "") As %Status [ Internal ]

Log a step within the execution of this query. This is an internal diagnostic.

%PrintNode

Method %PrintNode(pLevel As %Integer = 0)

Diagnostic. Print value of this node to the console.

%Prepare

Method %Prepare() As %Status

Prepare this query.
This is the first step in executing a query.

%HasOrder

Method %HasOrder(pMember, Output pHasOrder, Output pGroup) As %Status

Check if pMember has an ORDER() function in it (or in one of its children).

%HasSubsetFunction

Method %HasSubsetFunction(ByRef pMember, Output pGroup, Output pHasSubsetFunction) As %Status

Check if a given group has a subset function (HEAD, TAIL, SUBSET) in it and, if so, return the first such subgroup with output pGroup.

%CompleteAxes

Method %CompleteAxes() As %Status

Make sure this query has an executable set of axes. Axes 0 and 1 (COLUMNS, ROWS) are required, axis 2 is optional. If either Rows or Columns are missing, insert a placeholder %SEARCH term

%HasCurrentMember

Method %HasCurrentMember(pGroup As %DeepSee.Query.group) As %Boolean [ Internal ]

Test if a group has a current member in it.

%HasCrossJoin

Method %HasCrossJoin(pGroup As %DeepSee.Query.group) As %Boolean [ Internal ]

Test if a group has a crossjoin in it (with an aggregate or expression as its first child).

%IsAggFunc

ClassMethod %IsAggFunc(pFunc As %String) As %Boolean

Test if pFunc is an aggregate function

%RewriteForCurrentMember

Method %RewriteForCurrentMember(pParentGroup As %DeepSee.Query.group, pGroup As %DeepSee.Query.group, Output pNewGroup As %DeepSee.Query.group, ByRef pCmbrIndex, ByRef pCmbrID, Output pCmbrList, pLevel As %Integer = 0, pTreatAsExpr As %Boolean = 0) As %Status [ Internal ]

Rewrite a group and clean up the current member functions within it. On return pCmbrIndex contains the list of cmbr substitutions: pCmbrIndex("$$CMBRn$$") = spec
pCmbrID and pCmbrList are used to track state as this function recurses.

%RewriteForCrossJoin

Method %RewriteForCrossJoin(pParentGroup As %DeepSee.Query.group, pGroup As %DeepSee.Query.group, Output pNewGroup As %DeepSee.Query.group, pLevel As %Integer = 0) As %Status [ Internal ]

Rewrite a group and rewrite any CJOIN(agg(a),b) to CJOIN(b,agg(a))). Do the same for expression in the first child.

%RewriteForOrder

Method %RewriteForOrder(pAxis As %DeepSee.Query.axis, pOppAxis As %DeepSee.Query.axis) As %Status

Rewrite a group if necessary to sort the members of pOppAxis.

%GetMeasureFromSpec

ClassMethod %GetMeasureFromSpec(pSpec As %String, Output pMeasure) As %Status [ Internal ]

Utility. See if this spec is for a measure. If so return the measure name.

%PushDownCurrentMember

Method %PushDownCurrentMember(Output pNewGroup As %DeepSee.Query.group, pCurrMember As %DeepSee.Query.group, pExpr As %DeepSee.Query.group, pLevel As %Integer = 0) As %Status [ Internal ]

Push a current member down into an expression tree.

%ProcessSlicerRestrictions

Method %ProcessSlicerRestrictions(Output pBranches, Output pNoData As %Boolean) As %Status [ Internal ]

Build member restriction data from the materialized slicer axis. This is called by %GetMembers to prune the results based on the current slicer.

%FlattenSlicer

Method %FlattenSlicer(pNode As %DeepSee.Query.group, pLevel As %Integer = 0, Output pMoveAll As %Boolean) As %Status [ Internal ]

Walk down a given node within the slicer and flatten expressions and aggregate functions.

%CombineFiltersWithSlicer

Method %CombineFiltersWithSlicer() As %Status [ Internal ]

Combine all filters into the slicer.

%TestSubQueryCache

ClassMethod %TestSubQueryCache(pCubeName As %String, pQueryKey As %String, pTimestamp As %String, Output pCurrent As %Boolean, pQueryCube As %String) As %Status

Given a cube, subquery key, and timestamp, determine if there is an up-to-date result cache for the query. Return true (1) if this is the case.
As a side effect, remove any out-of-date portions of the result cache for this query.

%CheckSubqueryResultsCache

ClassMethod %CheckSubqueryResultsCache(pMainCube, pCubeName, pQueryKey, ByRef pUpToDate = 1) As %Status

%CheckResultsCache

ClassMethod %CheckResultsCache(pCubeName, pQueryKey, ByRef pUpToDate = 1) As %Status

%InitializeResultsCache

Method %InitializeResultsCache() As %Status [ Internal ]

Prepare the results cache for this query so that it can contain the axis and cell values.
If the query is already in the results cache, then this method may decide to re-use the previous results.

%PrepareResultsCache

Method %PrepareResultsCache() As %Status [ Internal, Private ]

Called after the axes are ready, this method does the final check to determine if the query results can be re-used and if not, fills in the starting values for the result cache.

%GetParameterInfo

Method %GetParameterInfo(Output pParms) As %Status

Return the set of named parameters values defined by this query.

%PreProcessQuery

Method %PreProcessQuery() As %Status

Execute the pre-processing logic for this node.

%ExecuteAsynch

Method %ExecuteAsynch(pWait As %Boolean = 0, Output pTaskGroupId As %String, pAxesOnly As %Boolean = 0, pAxisQuery As %String = "", ByRef pParms) As %Status

Execute this query using background agents.
If pWait is true (1) then do not return until the background agents are finished.
If pWait is false, then pTaskGroupId will return the task group id used to execute the query.

%ExecuteParameters

Method %ExecuteParameters(ByRef pParms) As %Status

Apply the set of named parameters values to this query and then make sure the result cache is ready to accept values.

%ExecuteAxes

Method %ExecuteAxes() As %Status [ Internal ]

Execute this query and materialize the contents of the result axes.
The results are written to the results cache.

%ReserveAxes

Method %ReserveAxes(Output pAxesAvailable) As %Status [ Internal ]

%ReleaseReservedAxes

ClassMethod %ReleaseReservedAxes(pCubeName, pQueryKey) As %Status [ Internal ]

Utility method to remove the zprocessing node for reserved axes

%MakeReserveAxisKey

Method %MakeReserveAxisKey(pType As %String, pAxis As axis, Output pReserveKey As %String, pOriginalSpec As %String = "") As %String [ Internal ]

%InitializeAxisCache

Method %InitializeAxisCache(pType As %String, pAxis As axis, Output pAxisKey As %String, Output pUpToDate As %Integer, pOriginalSpec As %String = "") As %Status [ Internal ]

Set up the axis cache for the given axis. Also test if the axis already exists and is up-to-date.
On return, pUpToDate is 1 if the axis is up-to-date, 0 if it is not, and -1 if it is a reference axis that needs further checking.

%ExecuteCells

Method %ExecuteCells(pTrace As %Boolean = 0) As %Status [ Internal ]

Execute this query and calculate the contents of the resulting cells.
Note that this may be called on a partially constructed query object if a ResultSet was prepared using an existing query key.

%ExecuteIntermediateCells

ClassMethod %ExecuteIntermediateCells(pCubeName As %String, pQueryKey As %String, pUseAgents As %Boolean = 1, pTrace As %Boolean = 0, ByRef pStats) As %Status [ Internal ]

This does the actual work of splitting the cells into buckets and sections and executing them.
This may be called from a background agent.

%ToString

Method %ToString(Output pSC As %Status) As %String

Convert this node to its text representation.

%WITHToString

Method %WITHToString() As %String

Convert the WITH clause for this query (named sets and calculated members) to a canonic text representation.

%LookupNamedSet

Method %LookupNamedSet(pName As %String, ByRef pSet As %DeepSee.Query.set, Output pSC As %Status) As %Boolean

See if the specified named set is defined.
pName should not have [ ] characters around it.

%LookupCalculatedMember

Method %LookupCalculatedMember(ByRef pMemberSpec As %String, pCount As %Integer, ByRef pSet As %DeepSee.Query.set, Output pSC As %Status, Output pIsFunc As %Boolean, pUseKey As %Boolean = 0) As %Boolean

See if the specified calculated member is defined.
pMemberSpec is an array of the names making up the member spec. pCount is the number of names to look at in the list. None of the names in the list should have [ ] characters around them.
If the last item in the list is the name of one of the few functions allowed on calculated dimensions, then pIsFunc is set.

%GetCalculatedMembers

Method %GetCalculatedMembers(pDimName As %String, ByRef pList As %String) As %Status

Find the list of calculated members in the given dimension. Return a list of their names: pList(UNAME) = name

%RegisterSubQuery

Method %RegisterSubQuery(pMDX As %String, Output pKey As %Integer, pAxis As axis = "", pSkipWITH As %Boolean = 0) As %Status

Add the given subquery to the list of subqueries and return its key (for subsequent lookup).

%CreateSubQueryResultSet

Method %CreateSubQueryResultSet(pMDX As %String, Output pRS As %DeepSee.ResultSet, pSkipWITH As %Boolean = 0) As %Status

Create and prepare a result set for a subquery within this query.

%GetSubQuery

Method %GetSubQuery(pKey As %Integer, Output pRS As %DeepSee.ResultSet) As %Status

Retrieve a ResultSet from the set of registered subqueries.

%ClearStatistics

Method %ClearStatistics()

Clear out current statistics for this query.

%PrintStatistics

Method %PrintStatistics()

Write out current statistics for this query.

%ResolveNamedParm

Method %ResolveNamedParm(pParmName As %String, Output pValue As %String) As %Status [ Internal ]

Evaluate the given named parameter and return its value.

%ComputeAxisCRC

ClassMethod %ComputeAxisCRC(pCube As %String, pAxisKey As %String, Output pCRC) As %Status [ Internal ]

Compute a CRC on the given query axis.<br/ This is used to determine if a cached axis is still valid.

%FoldCompoundQueries

Method %FoldCompoundQueries() As %Status [ Internal ]

Combine the results of a set of subqueries against the components of a compound cube.

%RewriteCompoundQuery

Method %RewriteCompoundQuery(Output pMDX As %String, pPrimaryCube As %String, pSubCube As %String, Output pNonEmptyInfo) As %Status [ Internal ]

Rewrite this query for use by a leg of a compound query.
pNonEmptyInfo indicates which axes are NON EMPTY; this is because the rewritten query does not have NON EMPTY-- it is applied at the end of the query.

%RewriteWITH

Method %RewriteWITH(pWithText As %String, pPrimaryCube As %String, pSubCube As %String, Output pText As %String) As %Status [ Internal ]

%RewriteGroup

Method %RewriteGroup(Output pNewGroup As %DeepSee.Query.group, pIsSlicer As %Boolean, pPrimaryCube As %String, pSubCube As %String, pGroup As group, ByRef pCalcMbrNames As %String) As %Status [ Internal ]

Rewrite part of a query for use by a compound query.

%GetLanguage

ClassMethod %GetLanguage() As %String [ Internal ]

Return the RFC 1766 code of the current language. Used to ensure that cached values preserve localization.

%CompressTimeRange

Method %CompressTimeRange(pNode As %DeepSee.Query.range) As %DeepSee.Query.node [ Internal ]

See if a time range can be compressed into smaller units.

%SplitDateRange

ClassMethod %SplitDateRange(pStartDate As %Date, pEndDate As %Date, Output pRange, pCalendar As %String = "gregorian") As %Boolean [ Internal ]

Given a start and end of a date range, return a set of ranges that cover the original range with as few members as possible. The higher level units are months and years. Return an array of ranges:
pRange(n) = $LB("day|month|year",start,end)

%GetLastDay

ClassMethod %GetLastDay(pYear As %Integer, pMonth As %Integer, pCalendar As %String) As %Integer [ Internal ]

Return the last day (number) of the given year and month.

%GetLastDayHorolog

ClassMethod %GetLastDayHorolog(pYear As %Integer, pMonth As %Integer, pCalendar As %String = "gregorian") As %Integer [ Internal ]

Return the last day (number) of the given year and month.

%GetFirstDayHorolog

ClassMethod %GetFirstDayHorolog(pYear As %Integer, pMonth As %Integer, pCalendar As %String = "gregorian") As %Integer [ Internal ]

%SplitDate

ClassMethod %SplitDate(pDate As %Date, pCalendar As %String = "gregorian", Output pYear, Output pMonth, Output pDay) As %Status [ Internal ]

Return the last day (number) of the given year and month.

%RewriteForTimeFolding

Method %RewriteForTimeFolding(pParentGroup As %DeepSee.Query.group, pGroup As %DeepSee.Query.group, Output pNewGroup As %DeepSee.Query.group, pLevel As %Integer = 0) As %Status [ Internal ]

Rewrite a group and rewrite any SUM(timeRange) as SUM(foldedTimeRange). Also applies to %OR().

%FindMemberInfo

Method %FindMemberInfo(pNode As %DeepSee.Query.node, Output pMember As %DeepSee.Query.member) As %Status [ Internal ]

Utility method. Try to find the dimension info assoiciated with the provided query object.

%IsMeasure

ClassMethod %IsMeasure(pNode As %DeepSee.Query.node, Output pStatus) As %String [ Internal ]

Utility Method. Determine whether the current node can be considered a measure. Returns: "cell" - This node is a spreadsheet function and is exempt 1 - This node functions as a measure 0 - This node does not function as a measure

%IsMember

ClassMethod %IsMember(pNode As %DeepSee.Query.node, Output pStatus) As %Boolean [ Internal ]

Utility Method. Determine whether the current node can be considered a member

%HasMeasure

ClassMethod %HasMeasure(pNode As %DeepSee.Query.node, ByRef pStatus As %Status) As %Boolean [ Internal ]

Test for an existence of a measure in pNode.

%HasRelations

ClassMethod %HasRelations(pCube, pNode As %DeepSee.Query.node, ByRef pStatus As %Status) As %Boolean

Utility method to test for related cube terms in a %DeepSee.Query.node object

%AddLabel

ClassMethod %AddLabel(pReferenceGroup As %DeepSee.Query.group, pLabel As %DeepSee.Query.group = "", Output pLabeledGroup As %DeepSee.Query.group) As %Status

Add a %LABEL to pReferenceGroup. The label is supplied to the method as an abstracted %LABEL object pLabel. The input group is placed in the first argument of a %LABEL which contains all the same parameters that are defined in pLabel. The newly labeled group is returned in pLabeledGroup.

%RemoveLabel

ClassMethod %RemoveLabel(pReferenceGroup As %DeepSee.Query.group, Output pLabelGroup As %DeepSee.Query.group, Output pInnerGroup As %DeepSee.Query.group) As %Status

Remove the %LABEL and expose the group is is acting upon. The abstracted contents of the %LABEL are returned as the pLabelGroup.

%RemoveLabelsInFilterExpression

ClassMethod %RemoveLabelsInFilterExpression(pReferenceGroup As %DeepSee.Query.group, Output pOutputGroup As %DeepSee.Query.group, pCubeName As %String = "") As %Status

%IsCrossjoinSwapExempt

ClassMethod %IsCrossjoinSwapExempt(pNode1, pNode2) As %Boolean [ Internal ]

Test to determine if the two provided crossjoin terms are swap-exempt

%RewriteNodeAsSubquery

ClassMethod %RewriteNodeAsSubquery(pNode) As %DeepSee.Query.node

Write the node as the columns clause in an %MDX subquery.

%SetVariables

Method %SetVariables(ByRef pVariables) As %Status

%ResolveVariablesInText

ClassMethod %ResolveVariablesInText(pMDX As %String, ByRef pVariables) As %Status

Resolve any instances of "$variable.Name" in the text pMDX using values in the lookup array pVariables.

%NullifyAxis

ClassMethod %NullifyAxis(pAxisKey) As %Status

Set the axis to a literal null

%CreateResultKey

Method %CreateResultKey(Output pStatus As %Status = {$$$OK}, Output pFinalText = "", pRefreshKey As %Boolean = 0, pMDXRequest As %String = "") As %String

Generate the result key for the current query object.

%CreateAxisKey

Method %CreateAxisKey(Output pStatus As %Status = {$$$OK}, pType = "", pAxis As %DeepSee.Query.axis = {$$$NULLOREF}, pOriginalSpec = "", Output pFinalText = "", pRefreshKey As %Boolean = 0) As %String

Generate an axis key for a %DeepSee.Query.axis object.

%ClearQueryResults

ClassMethod %ClearQueryResults(pCubeName As %String = "", pQueryKey As %String = "") As %Status [ Internal ]

This method provides a means for safely killing previously cached results without destroying the
^DeepSee.Cache.Results(CUBEKEY,QueryKey,"query")
node. Primarily this allows %PrepareKey to function if an execution determines the remainder of the cache is stale and cannot be reused.

%IsExecutable

Method %IsExecutable(Output pStatus = {$$$OK}, Output pReason As %String = "") As %Boolean

Test the current query object for enabled dimensions, measures, and relationships as aplicable. If all items have completed a build process and contain queryable data, the query is executable.