1

I am using the Cube.js react client to change the default timeDimension, dateRange, and granularity of my Query.

import { QueryBuilder } from '@cubejs-client/react'

here is what timeDimension property on the JSON Query should look like,

timeDimensions: [
          {
            dimension: 'EMSHistory.startTime',
            dateRange: 'Today',
            granularity: "day"
          },
        ]

The default query is what I see in Cube.js Server Logs. with the default settings of no dateRange property, which means default date range is all time, and granularity of "day".

this return data of all time, grouped by day, while I only want Today's data.

{
  "measures": [
    "EMSHistory.runDurationSum"
  ],
  "timeDimensions": [
    {
      "dimension": "EMSHistory.startTime",
      "granularity": "day"
    }
  ],
  "order": [
    {
      "id": "EMSHistory.startTime",
      "desc": false
    }
  ],
  "filters": [],
  "timezone": "Asia/Taipei",
  "dimensions": []
}

The Query I want should look like this:

{
  "measures": [
    "EMSHistory.runDurationSum"
  ],
  "timeDimensions": [
    {
      "dimension": "EMSHistory.startTime",
      "dateRange": [
        "2021-10-21T00:00:00.000",
        "2021-10-21T23:59:59.999"
      ]
    }
  ],
  "order": [
    {
      "id": "EMSHistory.startTime",
      "desc": false
    }
  ],
  "filters": [],
  "timezone": "Asia/Taipei",
  "dimensions": []
}

below is my code:

const ExploreQueryBuilder = ({
  vizState,
  finalTitle,
  customStyle,
  cubejsApi,
  setVizState,
  chartExtra,
  itemId,
}) => (
  <QueryBuilder
    vizState={vizState}
    finalTitle={finalTitle}
    setVizState={setVizState}
    cubejsApi={cubejsApi}
    wrapWithQueryRenderer={false}
    render={({
      validatedQuery,
      isQueryPresent,
      chartType,
      updateChartType,
      measures,
      availableMeasures,
      updateMeasures,
      dimensions,
      availableDimensions,
      updateDimensions,
      segments,
      availableSegments,
      updateSegments,
      filters,
      updateFilters,
      timeDimensions,
      availableTimeDimensions,
      updateTimeDimensions,
    }) => [
        <Row
          type="flex"
          justify="space-around"
          align="top"
          gutter={24}
          style={{
            marginBottom: 12,
          }}
          key="1"
        >
          <Col span={24}>
            <Card>
              <Row
                type="flex"
                justify="space-around"
                align="top"
                gutter={24}
                style={{
                  marginBottom: 12,
                }}
              >
                <Col span={24}>
                  <MemberGroup
                    members={measures}
                    availableMembers={availableMeasures}
                    addMemberName="Measure"
                    updateMethods={updateMeasures}
                  />
                  <Divider type="vertical" />
                  <MemberGroup
                    members={dimensions}
                    availableMembers={availableDimensions}
                    addMemberName="Dimension"
                    updateMethods={updateDimensions}
                  />
                  <Divider type="vertical" />
                  <MemberGroup
                    members={segments}
                    availableMembers={availableSegments}
                    addMemberName="Segment"
                    updateMethods={updateSegments}
                  />
                  <Divider type="vertical" />
                  <TimeGroup
                    members={timeDimensions}
                    availableMembers={availableTimeDimensions}
                    addMemberName="Time"
                    updateMethods={updateTimeDimensions}
                  />
                </Col>
              </Row>
              <Row
                type="flex"
                justify="space-around"
                align="top"
                gutter={24}
                style={{
                  marginBottom: 12,
                }}
              >
                <Col span={24}>
                  <FilterGroup
                    members={filters}
                    availableMembers={availableDimensions.concat(availableMeasures)}
                    addMemberName="Filter"
                    updateMethods={updateFilters}
                  />
                </Col>
              </Row>
              <Row type="flex" justify="space-around" align="top" gutter={24}>
                <Col span={24}>
                  <SelectChartType chartType={chartType} updateChartType={updateChartType} />
                </Col>
              </Row>
              {itemId ? (
                <Row
                  type="flex"
                  justify="flex-end"
                  align="top"
                  gutter={24}
                  style={{
                    marginTop: 12,
                  }}
                >
                  <Button type="primary">
                    <Link to={'/explore'}>
                      <FormattedMessage id={'component.copy'} />
                    </Link>
                  </Button>
                </Row>
              ) : null}
            </Card>
          </Col>
        </Row>,
        <Row type="flex" justify="space-around" align="top" gutter={24} key="2">
          <Col span={24}>
            {isQueryPresent ? (
              <Card
                title={finalTitle}
                headStyle={customStyle.card ? customStyle.card.headStyle : undefined}
                bodyStyle={customStyle.card ? customStyle.card.bodyStyle : undefined}
                key={new Date()}
                style={{
                  minHeight: 420,
                }}
                extra={chartExtra}
              >
                {filters[0] &&
                  filters[0].operator &&
                  (filters[0].values === undefined || filters[0].values.length === 0) ? (
                  <p>
                    <FormattedMessage id={'component.filter-value'} />
                  </p>
                ) : (
                  <ChartRenderer
                    vizState={{
                      query: validatedQuery,
                      chartType,
                    }}
                    customStyle={customStyle}
                    cubejsApi={cubejsApi}
                  />
                )}
              </Card>
            ) : (
              <h2
                style={{
                  textAlign: 'center',
                }}
              >
                <FormattedMessage id={'component.establish'} />
              </h2>
            )}
          </Col>
        </Row>,
      ]
    }
  />
);

ExploreQueryBuilder.propTypes = {
  vizState: PropTypes.object,
  finalTitle: PropTypes.object,
  customStyle: PropTypes.object,
  setVizState: PropTypes.func,
  cubejsApi: PropTypes.object,
  chartExtra: PropTypes.array,
};
ExploreQueryBuilder.defaultProps = {
  vizState: {},
  customStyle: {},
  setVizState: null,
  cubejsApi: null,
  chartExtra: null,
};
export default ExploreQueryBuilder;
Kaizendae
  • 853
  • 11
  • 24
Ezra Tsai
  • 43
  • 2

0 Answers0