Common foundations¶
Persona-blind helpers + base AWS dataclasses that the tree builds on top of. Most tree-API authors never touch these directly — the tree's typed wrappers cover the construction surface — but they're documented here for reference and for extension authors.
Models¶
The dataclass mapping to the AWS QuickSight API JSON shapes
(to_aws_json() produces the exact dict shape create-analysis /
create-dashboard / create-data-set / create-theme /
create-data-source accept).
models ¶
Dataclass models mapping to AWS QuickSight API JSON structures.
Each top-level model (Theme, DataSet, Analysis) has a to_aws_json() method
that returns the exact dict shape expected by the corresponding AWS CLI command
(create-theme, create-data-set, create-analysis).
ColumnIdentifier
dataclass
¶
References a column on a specific dataset by identifier.
Reused across many AWS QuickSight shapes — every typed field-well leaf (CategoricalDimensionField, DateDimensionField, etc.) and cascading control source carries one.
CategoricalDimensionField
dataclass
¶
DateDimensionField
dataclass
¶
__init__ ¶
__init__(FieldId: str, Column: ColumnIdentifier, DateGranularity: str | None = None, HierarchyId: str | None = None) -> None
NumericalDimensionField
dataclass
¶
FormatConfiguration
class-attribute
instance-attribute
¶
FormatConfiguration: NumberFormatConfiguration | None = None
__init__ ¶
__init__(FieldId: str, Column: ColumnIdentifier, HierarchyId: str | None = None, FormatConfiguration: NumberFormatConfiguration | None = None) -> None
DimensionField
dataclass
¶
Union type — set exactly one.
CategoricalDimensionField
class-attribute
instance-attribute
¶
CategoricalDimensionField: CategoricalDimensionField | None = None
DateDimensionField
class-attribute
instance-attribute
¶
DateDimensionField: DateDimensionField | None = None
NumericalDimensionField
class-attribute
instance-attribute
¶
NumericalDimensionField: NumericalDimensionField | None = None
__init__ ¶
__init__(CategoricalDimensionField: CategoricalDimensionField | None = None, DateDimensionField: DateDimensionField | None = None, NumericalDimensionField: NumericalDimensionField | None = None) -> None
NumericalAggregationFunction
dataclass
¶
DecimalPlacesConfiguration
dataclass
¶
ThousandSeparatorOptions
dataclass
¶
SeparatorConfiguration
dataclass
¶
ThousandsSeparator
class-attribute
instance-attribute
¶
ThousandsSeparator: ThousandSeparatorOptions | None = None
__init__ ¶
__init__(DecimalSeparator: str | None = None, ThousandsSeparator: ThousandSeparatorOptions | None = None) -> None
CurrencyDisplayFormatConfiguration
dataclass
¶
Currency-format wire shape. Symbol is an ISO 4217 code
("USD"); QuickSight renders the appropriate symbol prefix
($ for USD, etc.) automatically.
DecimalPlacesConfiguration
class-attribute
instance-attribute
¶
DecimalPlacesConfiguration: DecimalPlacesConfiguration | None = None
SeparatorConfiguration
class-attribute
instance-attribute
¶
SeparatorConfiguration: SeparatorConfiguration | None = None
__init__ ¶
__init__(Symbol: str | None = None, DecimalPlacesConfiguration: DecimalPlacesConfiguration | None = None, SeparatorConfiguration: SeparatorConfiguration | None = None) -> None
NumericFormatConfiguration
dataclass
¶
Discriminated union — exactly one of the three sub-format configurations is set.
NumberDisplayFormatConfiguration
class-attribute
instance-attribute
¶
NumberDisplayFormatConfiguration: dict[str, Any] | None = None
CurrencyDisplayFormatConfiguration
class-attribute
instance-attribute
¶
CurrencyDisplayFormatConfiguration: CurrencyDisplayFormatConfiguration | None = None
PercentageDisplayFormatConfiguration
class-attribute
instance-attribute
¶
PercentageDisplayFormatConfiguration: dict[str, Any] | None = None
__init__ ¶
__init__(NumberDisplayFormatConfiguration: dict[str, Any] | None = None, CurrencyDisplayFormatConfiguration: CurrencyDisplayFormatConfiguration | None = None, PercentageDisplayFormatConfiguration: dict[str, Any] | None = None) -> None
NumberFormatConfiguration
dataclass
¶
Wrapper carrying the actual format inside its
FormatConfiguration slot — this two-level nesting matches the
AWS QuickSight wire schema.
FormatConfiguration
class-attribute
instance-attribute
¶
FormatConfiguration: NumericFormatConfiguration | None = None
NumericalMeasureField
dataclass
¶
AggregationFunction
class-attribute
instance-attribute
¶
AggregationFunction: NumericalAggregationFunction | None = None
FormatConfiguration
class-attribute
instance-attribute
¶
FormatConfiguration: NumberFormatConfiguration | None = None
__init__ ¶
__init__(FieldId: str, Column: ColumnIdentifier, AggregationFunction: NumericalAggregationFunction | None = None, FormatConfiguration: NumberFormatConfiguration | None = None) -> None
CategoricalMeasureField
dataclass
¶
__init__ ¶
__init__(FieldId: str, Column: ColumnIdentifier, AggregationFunction: str | None = None) -> None
DateMeasureField
dataclass
¶
__init__ ¶
__init__(FieldId: str, Column: ColumnIdentifier, AggregationFunction: str | None = None) -> None
MeasureField
dataclass
¶
Union type — set exactly one.
NumericalMeasureField
class-attribute
instance-attribute
¶
NumericalMeasureField: NumericalMeasureField | None = None
CategoricalMeasureField
class-attribute
instance-attribute
¶
CategoricalMeasureField: CategoricalMeasureField | None = None
DateMeasureField
class-attribute
instance-attribute
¶
DateMeasureField: DateMeasureField | None = None
__init__ ¶
__init__(NumericalMeasureField: NumericalMeasureField | None = None, CategoricalMeasureField: CategoricalMeasureField | None = None, DateMeasureField: DateMeasureField | None = None) -> None
VisualTitleLabelOptions
dataclass
¶
VisualSubtitleLabelOptions
dataclass
¶
DataColorPalette
dataclass
¶
__init__ ¶
__init__(Colors: list[str] | None = None, EmptyFillColor: str | None = None, MinMaxGradient: list[str] | None = None) -> None
UIColorPalette
dataclass
¶
__init__ ¶
__init__(PrimaryBackground: str | None = None, PrimaryForeground: str | None = None, SecondaryBackground: str | None = None, SecondaryForeground: str | None = None, Accent: str | None = None, AccentForeground: str | None = None, Danger: str | None = None, DangerForeground: str | None = None, Warning: str | None = None, WarningForeground: str | None = None, Success: str | None = None, SuccessForeground: str | None = None, Dimension: str | None = None, DimensionForeground: str | None = None, Measure: str | None = None, MeasureForeground: str | None = None) -> None
TileBorder
dataclass
¶
Tile
dataclass
¶
Gutter
dataclass
¶
Margin
dataclass
¶
TileLayout
dataclass
¶
SheetStyle
dataclass
¶
FontFamily
dataclass
¶
Typography
dataclass
¶
ThemeConfiguration
dataclass
¶
DataColorPalette
class-attribute
instance-attribute
¶
DataColorPalette: DataColorPalette | None = None
__init__ ¶
__init__(DataColorPalette: DataColorPalette | None = None, UIColorPalette: UIColorPalette | None = None, Sheet: SheetStyle | None = None, Typography: Typography | None = None) -> None
Tag
dataclass
¶
ResourcePermission
dataclass
¶
Theme
dataclass
¶
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
__init__ ¶
__init__(AwsAccountId: str, ThemeId: str, Name: str, BaseThemeId: str, Configuration: ThemeConfiguration, Permissions: list[ResourcePermission] | None = None, Tags: list[Tag] | None = None, VersionDescription: str | None = None) -> None
PostgreSqlParameters
dataclass
¶
OracleParameters
dataclass
¶
QuickSight OracleParameters shape (boto3 quicksight create-data-source).
Per the AWS QuickSight API:
- Host — RDS Oracle endpoint hostname.
- Port — listener port (defaults 1521).
- Database — SID or service name (e.g. ORCL).
- UseServiceName — when True, Database is treated as a
service name; when False (AWS default), as a SID.
UseServiceName defaults True on this dataclass because RDS
Oracle endpoints (and Aurora Oracle) connect via service name —
the SID-style interpretation only matches older self-managed
Oracle installs. Override at construction if needed.
DataSourceParameters
dataclass
¶
PostgreSqlParameters
class-attribute
instance-attribute
¶
PostgreSqlParameters: PostgreSqlParameters | None = None
OracleParameters
class-attribute
instance-attribute
¶
OracleParameters: OracleParameters | None = None
__init__ ¶
__init__(PostgreSqlParameters: PostgreSqlParameters | None = None, OracleParameters: OracleParameters | None = None) -> None
CredentialPair
dataclass
¶
DataSourceCredentials
dataclass
¶
SslProperties
dataclass
¶
DataSource
dataclass
¶
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
__init__ ¶
__init__(AwsAccountId: str, DataSourceId: str, Name: str, Type: str, DataSourceParameters: DataSourceParameters, Credentials: DataSourceCredentials | None = None, SslProperties: SslProperties | None = None, Permissions: list[ResourcePermission] | None = None, Tags: list[Tag] | None = None) -> None
InputColumn
dataclass
¶
CustomSql
dataclass
¶
__init__ ¶
__init__(Name: str, DataSourceArn: str, SqlQuery: str, Columns: list[InputColumn]) -> None
PhysicalTable
dataclass
¶
LogicalTableSource
dataclass
¶
LogicalTable
dataclass
¶
DataTransforms
class-attribute
instance-attribute
¶
DataTransforms: list[dict[str, Any]] | None = None
__init__ ¶
__init__(Alias: str, Source: LogicalTableSource, DataTransforms: list[dict[str, Any]] | None = None) -> None
DataSetUsageConfiguration
dataclass
¶
DisableUseAsDirectQuerySource
class-attribute
instance-attribute
¶
DisableUseAsDirectQuerySource: bool = False
DisableUseAsImportedSource
class-attribute
instance-attribute
¶
DisableUseAsImportedSource: bool = False
__init__ ¶
__init__(DisableUseAsDirectQuerySource: bool = False, DisableUseAsImportedSource: bool = False) -> None
StringDatasetParameterDefaultValues
dataclass
¶
IntegerDatasetParameterDefaultValues
dataclass
¶
DecimalDatasetParameterDefaultValues
dataclass
¶
DateTimeDatasetParameterDefaultValues
dataclass
¶
StringDatasetParameter
dataclass
¶
DefaultValues
class-attribute
instance-attribute
¶
DefaultValues: StringDatasetParameterDefaultValues | None = None
__init__ ¶
__init__(Id: str, Name: str, ValueType: str, DefaultValues: StringDatasetParameterDefaultValues | None = None) -> None
IntegerDatasetParameter
dataclass
¶
DefaultValues
class-attribute
instance-attribute
¶
DefaultValues: IntegerDatasetParameterDefaultValues | None = None
__init__ ¶
__init__(Id: str, Name: str, ValueType: str, DefaultValues: IntegerDatasetParameterDefaultValues | None = None) -> None
DecimalDatasetParameter
dataclass
¶
DefaultValues
class-attribute
instance-attribute
¶
DefaultValues: DecimalDatasetParameterDefaultValues | None = None
__init__ ¶
__init__(Id: str, Name: str, ValueType: str, DefaultValues: DecimalDatasetParameterDefaultValues | None = None) -> None
DateTimeDatasetParameter
dataclass
¶
DefaultValues
class-attribute
instance-attribute
¶
DefaultValues: DateTimeDatasetParameterDefaultValues | None = None
__init__ ¶
__init__(Id: str, Name: str, ValueType: str, TimeGranularity: str | None = None, DefaultValues: DateTimeDatasetParameterDefaultValues | None = None) -> None
DatasetParameter
dataclass
¶
Discriminated union — set exactly one variant.
StringDatasetParameter
class-attribute
instance-attribute
¶
StringDatasetParameter: StringDatasetParameter | None = None
IntegerDatasetParameter
class-attribute
instance-attribute
¶
IntegerDatasetParameter: IntegerDatasetParameter | None = None
DecimalDatasetParameter
class-attribute
instance-attribute
¶
DecimalDatasetParameter: DecimalDatasetParameter | None = None
DateTimeDatasetParameter
class-attribute
instance-attribute
¶
DateTimeDatasetParameter: DateTimeDatasetParameter | None = None
__init__ ¶
__init__(StringDatasetParameter: StringDatasetParameter | None = None, IntegerDatasetParameter: IntegerDatasetParameter | None = None, DecimalDatasetParameter: DecimalDatasetParameter | None = None, DateTimeDatasetParameter: DateTimeDatasetParameter | None = None) -> None
DataSet
dataclass
¶
LogicalTableMap
class-attribute
instance-attribute
¶
LogicalTableMap: dict[str, LogicalTable] | None = None
DataSetUsageConfiguration
class-attribute
instance-attribute
¶
DataSetUsageConfiguration: DataSetUsageConfiguration | None = None
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
DatasetParameters
class-attribute
instance-attribute
¶
DatasetParameters: list[DatasetParameter] | None = None
__init__ ¶
__init__(AwsAccountId: str, DataSetId: str, Name: str, PhysicalTableMap: dict[str, PhysicalTable], ImportMode: str = 'DIRECT_QUERY', LogicalTableMap: dict[str, LogicalTable] | None = None, DataSetUsageConfiguration: DataSetUsageConfiguration | None = None, Permissions: list[ResourcePermission] | None = None, Tags: list[Tag] | None = None, DatasetParameters: list[DatasetParameter] | None = None) -> None
AxisLabelReferenceOptions
dataclass
¶
Bind an AxisLabelOptions.CustomLabel to a specific field-well
leaf. AWS QuickSight requires the ApplyTo reference for the
custom label to render on the axis — without it, CustomLabel is
silently ignored (chart axis renders the raw column name).
See quicksight-quirks.md entry on chart axis labels.
AxisLabelOptions
dataclass
¶
Label override for a single axis field.
ApplyTo is the binding to a specific FieldId + dataset
column. AWS QuickSight requires it for CustomLabel to render —
a label without ApplyTo is parsed cleanly but produces a chart
that still shows the raw column name on the axis (silent
no-op). v8.6.1 made the field required at the type level after
v8.5.5's auto-derive-but-no-render bug.
__init__ ¶
__init__(CustomLabel: str | None = None, ApplyTo: AxisLabelReferenceOptions | None = None) -> None
ChartAxisLabelOptions
dataclass
¶
Axis label options — list of per-field overrides plus visibility.
AxisLabelOptions
class-attribute
instance-attribute
¶
AxisLabelOptions: list[AxisLabelOptions] | None = None
__init__ ¶
__init__(Visibility: str = 'VISIBLE', AxisLabelOptions: list[AxisLabelOptions] | None = None) -> None
BarChartAggregatedFieldWells
dataclass
¶
__init__ ¶
__init__(Category: list[DimensionField] | None = None, Values: list[MeasureField] | None = None, Colors: list[DimensionField] | None = None) -> None
BarChartFieldWells
dataclass
¶
BarChartAggregatedFieldWells
class-attribute
instance-attribute
¶
BarChartAggregatedFieldWells: BarChartAggregatedFieldWells | None = None
__init__ ¶
__init__(BarChartAggregatedFieldWells: BarChartAggregatedFieldWells | None = None) -> None
BarChartSortConfiguration
dataclass
¶
BarChartConfiguration
dataclass
¶
SortConfiguration
class-attribute
instance-attribute
¶
SortConfiguration: BarChartSortConfiguration | None = None
CategoryLabelOptions
class-attribute
instance-attribute
¶
CategoryLabelOptions: ChartAxisLabelOptions | None = None
ValueLabelOptions
class-attribute
instance-attribute
¶
ValueLabelOptions: ChartAxisLabelOptions | None = None
ColorLabelOptions
class-attribute
instance-attribute
¶
ColorLabelOptions: ChartAxisLabelOptions | None = None
__init__ ¶
__init__(FieldWells: BarChartFieldWells | None = None, Orientation: str | None = None, BarsArrangement: str | None = None, SortConfiguration: BarChartSortConfiguration | None = None, CategoryLabelOptions: ChartAxisLabelOptions | None = None, ValueLabelOptions: ChartAxisLabelOptions | None = None, ColorLabelOptions: ChartAxisLabelOptions | None = None) -> None
BarChartVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: BarChartConfiguration | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: BarChartConfiguration | None = None, Actions: list[VisualCustomAction] | None = None) -> None
LineChartAggregatedFieldWells
dataclass
¶
__init__ ¶
__init__(Category: list[DimensionField] | None = None, Values: list[MeasureField] | None = None, Colors: list[DimensionField] | None = None) -> None
LineChartFieldWells
dataclass
¶
LineChartAggregatedFieldWells
class-attribute
instance-attribute
¶
LineChartAggregatedFieldWells: LineChartAggregatedFieldWells | None = None
__init__ ¶
__init__(LineChartAggregatedFieldWells: LineChartAggregatedFieldWells | None = None) -> None
LineChartSortConfiguration
dataclass
¶
LineChartConfiguration
dataclass
¶
SortConfiguration
class-attribute
instance-attribute
¶
SortConfiguration: LineChartSortConfiguration | None = None
XAxisLabelOptions
class-attribute
instance-attribute
¶
XAxisLabelOptions: ChartAxisLabelOptions | None = None
PrimaryYAxisLabelOptions
class-attribute
instance-attribute
¶
PrimaryYAxisLabelOptions: ChartAxisLabelOptions | None = None
__init__ ¶
__init__(FieldWells: LineChartFieldWells | None = None, Type: str | None = None, SortConfiguration: LineChartSortConfiguration | None = None, XAxisLabelOptions: ChartAxisLabelOptions | None = None, PrimaryYAxisLabelOptions: ChartAxisLabelOptions | None = None) -> None
LineChartVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: LineChartConfiguration | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: LineChartConfiguration | None = None, Actions: list[VisualCustomAction] | None = None) -> None
PieChartAggregatedFieldWells
dataclass
¶
__init__ ¶
__init__(Category: list[DimensionField] | None = None, Values: list[MeasureField] | None = None) -> None
PieChartFieldWells
dataclass
¶
PieChartAggregatedFieldWells
class-attribute
instance-attribute
¶
PieChartAggregatedFieldWells: PieChartAggregatedFieldWells | None = None
__init__ ¶
__init__(PieChartAggregatedFieldWells: PieChartAggregatedFieldWells | None = None) -> None
DonutOptions
dataclass
¶
PieChartConfiguration
dataclass
¶
CategoryLabelOptions
class-attribute
instance-attribute
¶
CategoryLabelOptions: ChartAxisLabelOptions | None = None
ValueLabelOptions
class-attribute
instance-attribute
¶
ValueLabelOptions: ChartAxisLabelOptions | None = None
__init__ ¶
__init__(FieldWells: PieChartFieldWells | None = None, DonutOptions: DonutOptions | None = None, CategoryLabelOptions: ChartAxisLabelOptions | None = None, ValueLabelOptions: ChartAxisLabelOptions | None = None) -> None
PieChartVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: PieChartConfiguration | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: PieChartConfiguration | None = None, Actions: list[VisualCustomAction] | None = None) -> None
KPIFieldWells
dataclass
¶
__init__ ¶
__init__(Values: list[MeasureField] | None = None, TargetValues: list[MeasureField] | None = None, TrendGroups: list[DimensionField] | None = None) -> None
KPIOptions
dataclass
¶
KPI display options.
QS rejects partial KPIOptions when the field-well has no
TargetValue/TrendGroup (verified against hand-built control
KPI on 2026-04-29 — KPIOptions(PrimaryValueDisplayType="ACTUAL")
alone got rejected with "Only PrimaryValueFontSize display
property can be defined..."). The hand-built shape — Comparison +
PrimaryValueDisplayType + SecondaryValueFontConfiguration +
Sparkline + VisualLayoutOptions — is the smallest set QS UI
produces and accepts. Tree's KPI.emit() defaults to that shape.
PrimaryValueDisplayType
class-attribute
instance-attribute
¶
PrimaryValueDisplayType: str | None = None
SecondaryValueFontConfiguration
class-attribute
instance-attribute
¶
SecondaryValueFontConfiguration: dict[str, Any] | None = None
VisualLayoutOptions
class-attribute
instance-attribute
¶
VisualLayoutOptions: dict[str, Any] | None = None
__init__ ¶
__init__(Comparison: dict[str, Any] | None = None, PrimaryValueDisplayType: str | None = None, SecondaryValueFontConfiguration: dict[str, Any] | None = None, Sparkline: dict[str, Any] | None = None, VisualLayoutOptions: dict[str, Any] | None = None) -> None
KPIConfiguration
dataclass
¶
__init__ ¶
__init__(FieldWells: KPIFieldWells | None = None, KPIOptions: KPIOptions | None = None) -> None
KPIVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: KPIConfiguration | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: KPIConfiguration | None = None) -> None
TableAggregatedFieldWells
dataclass
¶
__init__ ¶
__init__(GroupBy: list[DimensionField] | None = None, Values: list[MeasureField] | None = None) -> None
TableUnaggregatedFieldWells
dataclass
¶
TableFieldWells
dataclass
¶
TableAggregatedFieldWells
class-attribute
instance-attribute
¶
TableAggregatedFieldWells: TableAggregatedFieldWells | None = None
TableUnaggregatedFieldWells
class-attribute
instance-attribute
¶
TableUnaggregatedFieldWells: TableUnaggregatedFieldWells | None = None
__init__ ¶
__init__(TableAggregatedFieldWells: TableAggregatedFieldWells | None = None, TableUnaggregatedFieldWells: TableUnaggregatedFieldWells | None = None) -> None
TableOptions
dataclass
¶
TableFieldOption
dataclass
¶
Per-column header override for a Table visual (v8.5.0).
FieldId references one of the Table's field-well leaves
(Dim or Measure). CustomLabel overrides the header text
QuickSight would otherwise auto-derive from the column name.
Visibility defaults to "VISIBLE".
__init__ ¶
__init__(FieldId: str, CustomLabel: str | None = None, Visibility: str = 'VISIBLE') -> None
TableFieldOptions
dataclass
¶
Container for per-column table header overrides (v8.5.0).
SelectedFieldOptions
class-attribute
instance-attribute
¶
SelectedFieldOptions: list[TableFieldOption] | None = None
TableConfiguration
dataclass
¶
SortConfiguration
class-attribute
instance-attribute
¶
SortConfiguration: dict[str, Any] | None = None
__init__ ¶
__init__(FieldWells: TableFieldWells | None = None, SortConfiguration: dict[str, Any] | None = None, TableOptions: TableOptions | None = None, FieldOptions: TableFieldOptions | None = None) -> None
TableVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: TableConfiguration | None = None
ConditionalFormatting
class-attribute
instance-attribute
¶
ConditionalFormatting: dict[str, Any] | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: TableConfiguration | None = None, Actions: list[VisualCustomAction] | None = None, ConditionalFormatting: dict[str, Any] | None = None) -> None
SankeyDiagramAggregatedFieldWells
dataclass
¶
__init__ ¶
__init__(Source: list[DimensionField] | None = None, Destination: list[DimensionField] | None = None, Weight: list[MeasureField] | None = None) -> None
SankeyDiagramFieldWells
dataclass
¶
SankeyDiagramAggregatedFieldWells
class-attribute
instance-attribute
¶
SankeyDiagramAggregatedFieldWells: SankeyDiagramAggregatedFieldWells | None = None
__init__ ¶
__init__(SankeyDiagramAggregatedFieldWells: SankeyDiagramAggregatedFieldWells | None = None) -> None
SankeyDiagramSortConfiguration
dataclass
¶
SourceItemsLimit
class-attribute
instance-attribute
¶
SourceItemsLimit: dict[str, Any] | None = None
DestinationItemsLimit
class-attribute
instance-attribute
¶
DestinationItemsLimit: dict[str, Any] | None = None
__init__ ¶
__init__(WeightSort: list[dict[str, Any]] | None = None, SourceItemsLimit: dict[str, Any] | None = None, DestinationItemsLimit: dict[str, Any] | None = None) -> None
SankeyDiagramChartConfiguration
dataclass
¶
SortConfiguration
class-attribute
instance-attribute
¶
SortConfiguration: SankeyDiagramSortConfiguration | None = None
__init__ ¶
__init__(FieldWells: SankeyDiagramFieldWells | None = None, SortConfiguration: SankeyDiagramSortConfiguration | None = None, DataLabels: dict[str, Any] | None = None) -> None
SankeyDiagramVisual
dataclass
¶
ChartConfiguration
class-attribute
instance-attribute
¶
ChartConfiguration: SankeyDiagramChartConfiguration | None = None
__init__ ¶
__init__(VisualId: str, Title: VisualTitleLabelOptions | None = None, Subtitle: VisualSubtitleLabelOptions | None = None, ChartConfiguration: SankeyDiagramChartConfiguration | None = None, Actions: list[VisualCustomAction] | None = None) -> None
LocalNavigationConfiguration
dataclass
¶
CustomActionNavigationOperation
dataclass
¶
LocalNavigationConfiguration
instance-attribute
¶
LocalNavigationConfiguration: LocalNavigationConfiguration
CustomActionSetParametersOperation
dataclass
¶
SameSheetTargetVisualConfiguration
dataclass
¶
FilterOperationTargetVisualsConfiguration
dataclass
¶
SameSheetTargetVisualConfiguration
class-attribute
instance-attribute
¶
SameSheetTargetVisualConfiguration: SameSheetTargetVisualConfiguration | None = None
__init__ ¶
__init__(SameSheetTargetVisualConfiguration: SameSheetTargetVisualConfiguration | None = None) -> None
FilterOperationSelectedFieldsConfiguration
dataclass
¶
SelectedColumns
class-attribute
instance-attribute
¶
SelectedColumns: list[ColumnIdentifier] | None = None
__init__ ¶
__init__(SelectedFieldOptions: str | None = None, SelectedFields: list[str] | None = None, SelectedColumns: list[ColumnIdentifier] | None = None) -> None
CustomActionFilterOperation
dataclass
¶
SelectedFieldsConfiguration
instance-attribute
¶
SelectedFieldsConfiguration: FilterOperationSelectedFieldsConfiguration
TargetVisualsConfiguration
instance-attribute
¶
TargetVisualsConfiguration: FilterOperationTargetVisualsConfiguration
__init__ ¶
__init__(SelectedFieldsConfiguration: FilterOperationSelectedFieldsConfiguration, TargetVisualsConfiguration: FilterOperationTargetVisualsConfiguration) -> None
VisualCustomActionOperation
dataclass
¶
Union type — set exactly one.
NavigationOperation
class-attribute
instance-attribute
¶
NavigationOperation: CustomActionNavigationOperation | None = None
SetParametersOperation
class-attribute
instance-attribute
¶
SetParametersOperation: CustomActionSetParametersOperation | None = None
FilterOperation
class-attribute
instance-attribute
¶
FilterOperation: CustomActionFilterOperation | None = None
__init__ ¶
__init__(NavigationOperation: CustomActionNavigationOperation | None = None, SetParametersOperation: CustomActionSetParametersOperation | None = None, FilterOperation: CustomActionFilterOperation | None = None) -> None
VisualCustomAction
dataclass
¶
DATA_POINT_CLICK
class-attribute
¶
DATA_POINT_CLICK: Literal['DATA_POINT_CLICK'] = 'DATA_POINT_CLICK'
__init__ ¶
__init__(CustomActionId: str, Name: str, Trigger: Literal['DATA_POINT_CLICK', 'DATA_POINT_MENU'], ActionOperations: list[VisualCustomActionOperation], Status: Literal['ENABLED', 'DISABLED'] = 'ENABLED') -> None
Visual
dataclass
¶
Union type — set exactly one.
SankeyDiagramVisual
class-attribute
instance-attribute
¶
SankeyDiagramVisual: SankeyDiagramVisual | None = None
__init__ ¶
__init__(BarChartVisual: BarChartVisual | None = None, LineChartVisual: LineChartVisual | None = None, PieChartVisual: PieChartVisual | None = None, KPIVisual: KPIVisual | None = None, TableVisual: TableVisual | None = None, SankeyDiagramVisual: SankeyDiagramVisual | None = None) -> None
DefaultDateTimePickerControlOptions
dataclass
¶
DefaultDropdownControlOptions
dataclass
¶
DefaultSliderControlOptions
dataclass
¶
__init__ ¶
__init__(MaximumValue: float, MinimumValue: float, StepSize: float, Type: str = 'SINGLE_POINT') -> None
DefaultFilterControlOptions
dataclass
¶
Union type — set exactly one.
DefaultDateTimePickerOptions
class-attribute
instance-attribute
¶
DefaultDateTimePickerOptions: DefaultDateTimePickerControlOptions | None = None
DefaultDropdownOptions
class-attribute
instance-attribute
¶
DefaultDropdownOptions: DefaultDropdownControlOptions | None = None
DefaultSliderOptions
class-attribute
instance-attribute
¶
DefaultSliderOptions: DefaultSliderControlOptions | None = None
__init__ ¶
__init__(DefaultDateTimePickerOptions: DefaultDateTimePickerControlOptions | None = None, DefaultDropdownOptions: DefaultDropdownControlOptions | None = None, DefaultSliderOptions: DefaultSliderControlOptions | None = None) -> None
DefaultFilterControlConfiguration
dataclass
¶
CategoryFilterConfiguration
dataclass
¶
FilterListConfiguration
class-attribute
instance-attribute
¶
FilterListConfiguration: dict[str, Any] | None = None
CustomFilterListConfiguration
class-attribute
instance-attribute
¶
CustomFilterListConfiguration: dict[str, Any] | None = None
CustomFilterConfiguration
class-attribute
instance-attribute
¶
CustomFilterConfiguration: dict[str, Any] | None = None
__init__ ¶
__init__(FilterListConfiguration: dict[str, Any] | None = None, CustomFilterListConfiguration: dict[str, Any] | None = None, CustomFilterConfiguration: dict[str, Any] | None = None) -> None
CategoryFilter
dataclass
¶
DefaultFilterControlConfiguration
class-attribute
instance-attribute
¶
DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None
__init__ ¶
__init__(FilterId: str, Column: ColumnIdentifier, Configuration: CategoryFilterConfiguration, DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None) -> None
TimeRangeFilter
dataclass
¶
RangeMinimumValue
class-attribute
instance-attribute
¶
RangeMinimumValue: dict[str, Any] | None = None
RangeMaximumValue
class-attribute
instance-attribute
¶
RangeMaximumValue: dict[str, Any] | None = None
DefaultFilterControlConfiguration
class-attribute
instance-attribute
¶
DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None
__init__ ¶
__init__(FilterId: str, Column: ColumnIdentifier, NullOption: str = 'NON_NULLS_ONLY', TimeGranularity: str | None = None, RangeMinimumValue: dict[str, Any] | None = None, RangeMaximumValue: dict[str, Any] | None = None, IncludeMinimum: bool | None = None, IncludeMaximum: bool | None = None, DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None) -> None
TimeEqualityFilter
dataclass
¶
DefaultFilterControlConfiguration
class-attribute
instance-attribute
¶
DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None
__init__ ¶
__init__(FilterId: str, Column: ColumnIdentifier, Value: str | None = None, ParameterName: str | None = None, TimeGranularity: str | None = None, RollingDate: dict[str, Any] | None = None, DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None) -> None
NumericRangeFilterValue
dataclass
¶
Set exactly one — a literal bound or a parameter binding.
NumericRangeFilter
dataclass
¶
RangeMinimum
class-attribute
instance-attribute
¶
RangeMinimum: NumericRangeFilterValue | None = None
RangeMaximum
class-attribute
instance-attribute
¶
RangeMaximum: NumericRangeFilterValue | None = None
DefaultFilterControlConfiguration
class-attribute
instance-attribute
¶
DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None
__init__ ¶
__init__(FilterId: str, Column: ColumnIdentifier, NullOption: str = 'NON_NULLS_ONLY', RangeMinimum: NumericRangeFilterValue | None = None, RangeMaximum: NumericRangeFilterValue | None = None, IncludeMinimum: bool | None = None, IncludeMaximum: bool | None = None, DefaultFilterControlConfiguration: DefaultFilterControlConfiguration | None = None) -> None
Filter
dataclass
¶
Union type — set exactly one.
TimeEqualityFilter
class-attribute
instance-attribute
¶
TimeEqualityFilter: TimeEqualityFilter | None = None
NumericRangeFilter
class-attribute
instance-attribute
¶
NumericRangeFilter: NumericRangeFilter | None = None
__init__ ¶
__init__(CategoryFilter: CategoryFilter | None = None, TimeRangeFilter: TimeRangeFilter | None = None, TimeEqualityFilter: TimeEqualityFilter | None = None, NumericRangeFilter: NumericRangeFilter | None = None) -> None
SheetVisualScopingConfiguration
dataclass
¶
SelectedSheetsFilterScopeConfiguration
dataclass
¶
SheetVisualScopingConfigurations
class-attribute
instance-attribute
¶
SheetVisualScopingConfigurations: list[SheetVisualScopingConfiguration] | None = None
__init__ ¶
__init__(SheetVisualScopingConfigurations: list[SheetVisualScopingConfiguration] | None = None) -> None
FilterScopeConfiguration
dataclass
¶
Union type — set exactly one.
AllSheets
class-attribute
instance-attribute
¶
AllSheets: AllSheetsFilterScopeConfiguration | None = None
SelectedSheets
class-attribute
instance-attribute
¶
SelectedSheets: SelectedSheetsFilterScopeConfiguration | None = None
__init__ ¶
__init__(AllSheets: AllSheetsFilterScopeConfiguration | None = None, SelectedSheets: SelectedSheetsFilterScopeConfiguration | None = None) -> None
FilterGroup
dataclass
¶
CrossDataset
class-attribute
instance-attribute
¶
CrossDataset: Literal['SINGLE_DATASET', 'ALL_DATASETS'] = 'SINGLE_DATASET'
__init__ ¶
__init__(FilterGroupId: str, Filters: list[Filter], ScopeConfiguration: FilterScopeConfiguration, CrossDataset: Literal['SINGLE_DATASET', 'ALL_DATASETS'] = 'SINGLE_DATASET', Status: Literal['ENABLED', 'DISABLED'] | None = None) -> None
FilterDropDownControl
dataclass
¶
FilterDateTimePickerControl
dataclass
¶
__init__ ¶
__init__(FilterControlId: str, Title: str, SourceFilterId: str, Type: str | None = None) -> None
FilterSliderControl
dataclass
¶
__init__ ¶
__init__(FilterControlId: str, Title: str, SourceFilterId: str, MaximumValue: float, MinimumValue: float, StepSize: float, Type: str | None = None) -> None
FilterCrossSheetControl
dataclass
¶
FilterControl
dataclass
¶
Union type — set exactly one.
DateTimePicker
class-attribute
instance-attribute
¶
DateTimePicker: FilterDateTimePickerControl | None = None
__init__ ¶
__init__(Dropdown: FilterDropDownControl | None = None, DateTimePicker: FilterDateTimePickerControl | None = None, Slider: FilterSliderControl | None = None, CrossSheet: FilterCrossSheetControl | None = None) -> None
ParameterDropDownControl
dataclass
¶
SelectableValues
class-attribute
instance-attribute
¶
SelectableValues: dict[str, Any] | None = None
CascadingControlConfiguration
class-attribute
instance-attribute
¶
CascadingControlConfiguration: CascadingControlConfiguration | None = None
__init__ ¶
__init__(ParameterControlId: str, Title: str, SourceParameterName: str, Type: str | None = None, SelectableValues: dict[str, Any] | None = None, DisplayOptions: dict[str, Any] | None = None, CascadingControlConfiguration: CascadingControlConfiguration | None = None) -> None
ParameterDateTimePickerControl
dataclass
¶
ParameterSliderControl
dataclass
¶
__init__ ¶
__init__(ParameterControlId: str, Title: str, SourceParameterName: str, MinimumValue: float, MaximumValue: float, StepSize: float) -> None
ParameterTextFieldControl
dataclass
¶
Free-text input bound to a string parameter. The analyst types a value; QS sets the bound parameter to that value (no enumeration).
Right shape for parameters whose option universe is unbounded /
unknown at deploy time, or where the LinkedValues / StaticValues
sample-fetch path is misbehaving (the X.1.b L2FT cascade Value
dropdown ran into Sample values not found from QS's lazy
sample-values fetch on cold per-CI-run dashboards; text input has
no equivalent fetch path).
ParameterControl
dataclass
¶
Union type — set exactly one.
DateTimePicker
class-attribute
instance-attribute
¶
DateTimePicker: ParameterDateTimePickerControl | None = None
__init__ ¶
__init__(Dropdown: ParameterDropDownControl | None = None, DateTimePicker: ParameterDateTimePickerControl | None = None, Slider: ParameterSliderControl | None = None, TextField: ParameterTextFieldControl | None = None) -> None
FreeFormLayoutElement
dataclass
¶
PARAMETER_CONTROL
class-attribute
¶
PARAMETER_CONTROL: Literal['PARAMETER_CONTROL'] = 'PARAMETER_CONTROL'
ElementType
instance-attribute
¶
ElementType: Literal['VISUAL', 'FILTER_CONTROL', 'PARAMETER_CONTROL', 'TEXT_BOX', 'IMAGE']
__init__ ¶
__init__(ElementId: str, ElementType: Literal['VISUAL', 'FILTER_CONTROL', 'PARAMETER_CONTROL', 'TEXT_BOX', 'IMAGE'], XAxisLocation: str, YAxisLocation: str, Width: str, Height: str, Visibility: str = 'VISIBLE') -> None
FreeFormLayoutConfiguration
dataclass
¶
GridLayoutElement
dataclass
¶
PARAMETER_CONTROL
class-attribute
¶
PARAMETER_CONTROL: Literal['PARAMETER_CONTROL'] = 'PARAMETER_CONTROL'
ElementType
instance-attribute
¶
ElementType: Literal['VISUAL', 'FILTER_CONTROL', 'PARAMETER_CONTROL', 'TEXT_BOX', 'IMAGE']
__init__ ¶
__init__(ElementId: str, ElementType: Literal['VISUAL', 'FILTER_CONTROL', 'PARAMETER_CONTROL', 'TEXT_BOX', 'IMAGE'], ColumnSpan: int, RowSpan: int, ColumnIndex: int | None = None, RowIndex: int | None = None, Padding: str | None = None) -> None
GridLayoutConfiguration
dataclass
¶
CanvasSizeOptions
class-attribute
instance-attribute
¶
CanvasSizeOptions: dict[str, Any] | None = None
__init__ ¶
__init__(Elements: list[GridLayoutElement], CanvasSizeOptions: dict[str, Any] | None = None) -> None
LayoutConfiguration
dataclass
¶
Union type — set exactly one.
FreeFormLayout
class-attribute
instance-attribute
¶
FreeFormLayout: FreeFormLayoutConfiguration | None = None
__init__ ¶
__init__(GridLayout: GridLayoutConfiguration | None = None, FreeFormLayout: FreeFormLayoutConfiguration | None = None) -> None
Layout
dataclass
¶
SheetTextBox
dataclass
¶
SheetDefinition
dataclass
¶
FilterControls
class-attribute
instance-attribute
¶
FilterControls: list[FilterControl] | None = None
ParameterControls
class-attribute
instance-attribute
¶
ParameterControls: list[ParameterControl] | None = None
__init__ ¶
__init__(SheetId: str, Name: str | None = None, Title: str | None = None, Description: str | None = None, ContentType: str = 'INTERACTIVE', Visuals: list[Visual] | None = None, FilterControls: list[FilterControl] | None = None, ParameterControls: list[ParameterControl] | None = None, Layouts: list[Layout] | None = None, TextBoxes: list[SheetTextBox] | None = None) -> None
DataSetIdentifierDeclaration
dataclass
¶
MappedDataSetParameter
dataclass
¶
Bridges an analysis-level parameter to a dataset-level parameter.
When the analysis parameter changes, QuickSight pushes the value
into the named dataset parameter — which then substitutes into the
dataset's CustomSql via <<$paramName>> at query time. The
mapping list lives on the analysis ParameterDeclaration variant
(StringParameterDeclaration, etc.).
CascadingControlSource
dataclass
¶
One source control in a CascadingControlConfiguration.
SourceSheetControlId is the upstream control's ID; QS refreshes
THIS control whenever that source control's value changes.
ColumnToMatch is the documented value-match hint (used by
column-on-column cascades); for parameter-bridged cascades it can
be the dependent control's own source column — it doubles as a
"this column is the one that varies with the source" marker.
__init__ ¶
__init__(SourceSheetControlId: str | None = None, ColumnToMatch: ColumnIdentifier | None = None) -> None
CascadingControlConfiguration
dataclass
¶
UI-level cascade wiring: tells QS to refresh THIS control's options when any of the listed source controls change.
Required for the M.3.10c metadata cascade — without this, even
with MappedDataSetParameters correctly bridging analysis params
to dataset params, QS won't refresh the dependent dropdown's
options when the source dropdown changes (the dataset query
substitution stays "pending" until something else triggers a
refresh, like a sheet reload).
SourceControls
class-attribute
instance-attribute
¶
SourceControls: list[CascadingControlSource] | None = None
StringParameterDeclaration
dataclass
¶
MappedDataSetParameters
class-attribute
instance-attribute
¶
MappedDataSetParameters: list[MappedDataSetParameter] | None = None
__init__ ¶
__init__(ParameterValueType: str, Name: str, DefaultValues: dict[str, Any], MappedDataSetParameters: list[MappedDataSetParameter] | None = None) -> None
IntegerParameterDeclaration
dataclass
¶
MappedDataSetParameters
class-attribute
instance-attribute
¶
MappedDataSetParameters: list[MappedDataSetParameter] | None = None
__init__ ¶
__init__(ParameterValueType: str, Name: str, DefaultValues: dict[str, Any], MappedDataSetParameters: list[MappedDataSetParameter] | None = None) -> None
DateTimeDefaultValues
dataclass
¶
__init__ ¶
__init__(StaticValues: list[str] | None = None, DynamicValue: dict[str, Any] | None = None, RollingDate: dict[str, Any] | None = None) -> None
DateTimeParameterDeclaration
dataclass
¶
DefaultValues
class-attribute
instance-attribute
¶
DefaultValues: DateTimeDefaultValues | None = None
MappedDataSetParameters
class-attribute
instance-attribute
¶
MappedDataSetParameters: list[MappedDataSetParameter] | None = None
__init__ ¶
__init__(Name: str, TimeGranularity: str | None = None, DefaultValues: DateTimeDefaultValues | None = None, ValueWhenUnset: dict[str, Any] | None = None, MappedDataSetParameters: list[MappedDataSetParameter] | None = None) -> None
ParameterDeclaration
dataclass
¶
Union type — set exactly one.
StringParameterDeclaration
class-attribute
instance-attribute
¶
StringParameterDeclaration: StringParameterDeclaration | None = None
IntegerParameterDeclaration
class-attribute
instance-attribute
¶
IntegerParameterDeclaration: IntegerParameterDeclaration | None = None
DateTimeParameterDeclaration
class-attribute
instance-attribute
¶
DateTimeParameterDeclaration: DateTimeParameterDeclaration | None = None
__init__ ¶
__init__(StringParameterDeclaration: StringParameterDeclaration | None = None, IntegerParameterDeclaration: IntegerParameterDeclaration | None = None, DateTimeParameterDeclaration: DateTimeParameterDeclaration | None = None) -> None
AnalysisDefinition
dataclass
¶
DataSetIdentifierDeclarations
instance-attribute
¶
DataSetIdentifierDeclarations: list[DataSetIdentifierDeclaration]
ParameterDeclarations
class-attribute
instance-attribute
¶
ParameterDeclarations: list[ParameterDeclaration] | None = None
CalculatedFields
class-attribute
instance-attribute
¶
CalculatedFields: list[dict[str, Any]] | None = None
AnalysisDefaults
class-attribute
instance-attribute
¶
AnalysisDefaults: dict[str, Any] | None = None
QueryExecutionOptions
class-attribute
instance-attribute
¶
QueryExecutionOptions: dict[str, Any] | None = None
__init__ ¶
__init__(DataSetIdentifierDeclarations: list[DataSetIdentifierDeclaration], Sheets: list[SheetDefinition] | None = None, FilterGroups: list[FilterGroup] | None = None, ParameterDeclarations: list[ParameterDeclaration] | None = None, CalculatedFields: list[dict[str, Any]] | None = None, Options: dict[str, Any] | None = None, AnalysisDefaults: dict[str, Any] | None = None, QueryExecutionOptions: dict[str, Any] | None = None) -> None
Analysis
dataclass
¶
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
__init__ ¶
__init__(AwsAccountId: str, AnalysisId: str, Name: str, Definition: AnalysisDefinition, ThemeArn: str | None = None, Permissions: list[ResourcePermission] | None = None, Tags: list[Tag] | None = None) -> None
DashboardPublishOptions
dataclass
¶
AdHocFilteringOption
class-attribute
instance-attribute
¶
AdHocFilteringOption: dict[str, str] | None = None
ExportToCSVOption
class-attribute
instance-attribute
¶
ExportToCSVOption: dict[str, str] | None = None
SheetControlsOption
class-attribute
instance-attribute
¶
SheetControlsOption: dict[str, str] | None = None
__init__ ¶
__init__(AdHocFilteringOption: dict[str, str] | None = None, ExportToCSVOption: dict[str, str] | None = None, SheetControlsOption: dict[str, str] | None = None) -> None
LinkSharingConfiguration
dataclass
¶
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
Dashboard
dataclass
¶
Permissions
class-attribute
instance-attribute
¶
Permissions: list[ResourcePermission] | None = None
DashboardPublishOptions
class-attribute
instance-attribute
¶
DashboardPublishOptions: DashboardPublishOptions | None = None
LinkSharingConfiguration
class-attribute
instance-attribute
¶
LinkSharingConfiguration: LinkSharingConfiguration | None = None
__init__ ¶
__init__(AwsAccountId: str, DashboardId: str, Name: str, Definition: AnalysisDefinition, ThemeArn: str | None = None, Permissions: list[ResourcePermission] | None = None, Tags: list[Tag] | None = None, VersionDescription: str | None = None, DashboardPublishOptions: DashboardPublishOptions | None = None, LinkSharingConfiguration: LinkSharingConfiguration | None = None) -> None
Typed IDs¶
NewType wrappers for the URL-facing and analyst-facing identifiers that stay explicit even after Phase L's auto-ID work for internal IDs.
ids ¶
Typed identifier wrappers for QuickSight resource IDs.
QuickSight definitions cross-reference identifiers across many fields:
SheetId flows into SheetVisualScopingConfigurations.SheetId and
GridLayoutConfiguration, VisualId flows into the same scoping
configuration's VisualIds list, FilterGroupId is the dict key
QuickSight uses to look up a filter, and ParameterName is the bare
string that gets templated into a CategoryFilter.
All four are plain strings at the API boundary, so a typo or — more
insidiously — a kind swap (passing a SheetId into a VisualIds list,
say) does not raise; QuickSight either silently widens scope or
silently produces zero rows. The NewType wrappers here let mypy
catch wrong-kind-of-string at the call site, mirroring the
ColumnShape discipline common/drill.py already imposes on
parameter wiring.
The wrappers are zero-cost at runtime — SheetId(x) returns x
unchanged. They are an annotation discipline only.
Dataset contracts¶
DatasetContract ties a SQL query's projection to a typed list of
expected columns; build_dataset() is the shared constructor used
by every per-app datasets.py.
dataset_contract ¶
Dataset column contracts and shared dataset-building helpers.
A DatasetContract declares the column interface a dataset produces. The SQL is one implementation of that contract (against the demo schema); customers swap in their own SQL. Everything downstream (visuals, filters, drill-downs) binds to contract columns, not SQL specifics.
DATASET_ACTIONS
module-attribute
¶
DATASET_ACTIONS = ['quicksight:DescribeDataSet', 'quicksight:DescribeDataSetPermissions', 'quicksight:PassDataSet', 'quicksight:DescribeIngestion', 'quicksight:ListIngestions', 'quicksight:UpdateDataSet', 'quicksight:DeleteDataSet', 'quicksight:CreateIngestion', 'quicksight:CancelIngestion', 'quicksight:UpdateDataSetPermissions']
ColumnShape ¶
Bases: Enum
Application-level value shape of a drill-eligible column.
Layered above the AWS coarse type (STRING/DATETIME/...) so that two
columns sharing a wire type but representing different semantic values
cannot be cross-wired to the same drill parameter. K.2 spike found a
silent zero-row bug where exception_date (DATETIME) was bound to
a SINGLE_VALUED string parameter; QuickSight coerced it to the full
timestamp text "2026-04-07 00:00:00.000" which never matched the
destination's posted_date column (also STRING but YYYY-MM-DD
formatted via TO_CHAR). The shape captures both the encoding and the
semantic, so the typed drill helper can refuse the wiring at code-gen
time instead of silently producing zero rows.
Tag a column with a shape only if it's an actual drill source or
destination — every other column stays shape=None and is rejected
by DrillSourceField resolution.
DATE_YYYY_MM_DD_TEXT
class-attribute
instance-attribute
¶
DATE_YYYY_MM_DD_TEXT = 'date_yyyy_mm_dd_text'
SUBLEDGER_ACCOUNT_ID
class-attribute
instance-attribute
¶
SUBLEDGER_ACCOUNT_ID = 'subledger_account_id'
can_assign_to ¶
can_assign_to(other: 'ColumnShape') -> bool
True iff a value of self is acceptable into a other param.
Identical shapes are always assignable. SUBLEDGER_ACCOUNT_ID and
LEDGER_ACCOUNT_ID widen to ACCOUNT_ID (the destination
daily_balances.account_id column holds both ledger and
sub-ledger ids). Date encodings do NOT widen — DATETIME and
YYYY-MM-DD text are different wire types and cross-wiring them
is the K.2 bug class.
ColumnSpec
dataclass
¶
Declared column on a dataset's contract.
display_name (v8.5.0): plain-English header label QuickSight
table visuals use as the column header. When omitted, defaults to
a title-cased rewrite of the snake_case name — e.g.
account_id → "Account ID" (with smart-uppercasing of common
initialisms via _smart_title). Override when the auto-derived
form is awkward — e.g. amount_money defaults to "Amount
Money", but Investigation tables read better with the explicit
override "Amount" since the surrounding context already implies
money.
human_name
property
¶
human_name: str
Plain-English header label for this column.
display_name if set, else snake_case → "Title Case" with
common initialisms preserved (id → ID, eod → EOD, etc.).
__init__ ¶
__init__(name: str, type: str, shape: ColumnShape | None = None, display_name: str | None = None) -> None
DatasetContract
dataclass
¶
register_contract ¶
register_contract(visual_identifier: str, contract: DatasetContract) -> None
Register a visual_identifier -> contract mapping for shape lookup.
The key is the visual identifier (e.g. "ar-ledger-balance-drift-ds"),
the same string the visuals use as DataSetIdentifier= and that the
analysis maps to a real DataSet ARN via DataSetIdentifierDeclaration.
Idempotent for the same (visual_identifier, contract) pair; raises if a different contract is already registered under the same identifier (catches accidental identifier collisions).
get_contract ¶
get_contract(visual_identifier: str) -> DatasetContract
Look up the contract registered under visual_identifier.
Raises KeyError if not registered — usually means the dataset
hasn't been built yet in the current process. Tests / generators
should call build_dataset() before reaching code that resolves
drill source fields.
build_dataset ¶
build_dataset(cfg: Config, dataset_id: str, name: str, table_key: str, sql: str, contract: DatasetContract, visual_identifier: str, dataset_parameters: list[DatasetParameter] | None = None) -> DataSet
Build an AWS-shape DataSet.
dataset_parameters: optional list of dataset-level parameters
that get substituted into sql via the <<$paramName>>
syntax at QuickSight query time. Bridge to analysis params via
MappedDataSetParameters on the analysis ParameterDeclaration.
Cross-app deep links¶
URL builder for the CustomActionURLOperation — used when a drill
needs to jump to another app's deployed dashboard with parameter
values pre-set in the URL. (Note: per the L.6.7 / K.4.7 finding, the
QuickSight URL parameter sync defect means controls don't update —
data filters but the on-screen widget label stays "All".)
drill ¶
Typed cross-sheet drill helpers.
K.2 spike caught a sneaky bug class: a drill action bound a DATETIME
source column (exception_date) to a SINGLE_VALUED string parameter
(pArActivityDate), and QuickSight silently coerced it to a full
timestamp text "2026-04-07 00:00:00.000" that never matched the
destination's TO_CHAR-formatted posted_date column. Both ends were
"STRING" at the AWS coarse-type level, but the textual encodings
differed and the destination filter quietly produced zero rows. Bugs
like this look like missing data, not broken wiring — corrosive to
user trust.
Per the user's "encode invariants in the type system" preference, the fix isn't a validation test that walks the generated output; it's a typed constructor that refuses to wire incompatible shapes at all. The typed wrappers here let any wrong wiring fail at the call site with a TypeError that names both sides of the mismatch.
Usage::
from quicksight_gen.common.drill import (
DrillParam, DrillResetSentinel, cross_sheet_drill, field_source,
)
P_AR_ACCOUNT = DrillParam("pArAccountId", ColumnShape.ACCOUNT_ID)
cross_sheet_drill(
action_id="...",
name="View Transactions for Account-Day",
target_sheet=SHEET_AR_TRANSACTIONS,
writes=[
(P_AR_ACCOUNT, field_source("ar-todays-exc-account",
DS_AR_UNIFIED_EXCEPTIONS, "account_id")),
(P_AR_ACTIVITY_DATE, field_source(...)),
(P_AR_TRANSFER, DrillResetSentinel()),
],
trigger="DATA_POINT_MENU",
)
DrillWriteValue
module-attribute
¶
DrillWriteValue = Union[DrillSourceField, DrillResetSentinel, DrillStaticDateTime]
DrillParam
dataclass
¶
Destination parameter on a drill action — name + expected shape.
The shape captures the parameter's value semantics; set_drill_parameters
refuses to write a source field whose shape differs.
DrillSourceField
dataclass
¶
Source field on a drill action — visual field id + resolved shape.
Build via field_source(field_id, dataset_id, column_name) so the
shape is read from the dataset contract, not duplicated by hand.
DrillResetSentinel
dataclass
¶
Marker that a drill should reset a parameter to the sentinel value.
The destination calc-field filter recognizes the sentinel as PASS, so writing this clears the filter without needing an empty-string or null-value path that QuickSight's drill-action code path won't deliver to calc fields cleanly.
DrillStaticDateTime
dataclass
¶
Marker that a drill should write a fixed ISO-8601 datetime literal
to a DateTimeParam destination.
Use case: cross-sheet drills where the destination sheet has a
universal date-range filter the source sheet doesn't share — e.g.
L1's Pending Aging → Transactions. The aging sheet is a
current-state view (rows can be arbitrarily old); the Transactions
sheet's universal-filter window defaults to last 7 days. Without
a date write the drill-target leg falls outside the destination's
window and the table renders empty. Writing
DrillStaticDateTime("1990-01-01T00:00:00.000Z") to the
destination's date-start param widens the window so the drill-
target row is always visible.
QuickSight has no "now" or "rolling" expression you can write via
SetParametersOperation — the only options are SourceField (column
ref) or static CustomValues. Pick the static value carefully so
the picker-shown date isn't misleading; the L1 app uses
"1990-01-01T..." for start and "2099-12-31T..." for end,
framing the explicit "all time" intent.
Format: ISO-8601 with millisecond precision and the trailing
Z, matching what the L2FT app already uses for its static
StaticValues defaults.
field_source ¶
field_source(field_id: str, dataset_id: str, column_name: str) -> DrillSourceField
Resolve column_name's shape from its registered dataset contract.
Raises TypeError if the column has no shape tag (it isn't drill-
eligible), pointing at the call site so the developer can either
tag the column in the contract or pick a different source column.
Raises KeyError if the dataset_id isn't registered (usually
means the dataset hasn't been built in this process yet — ensure
build_all_datasets runs before visuals).
set_drill_parameters ¶
set_drill_parameters(*writes: DrillWrite) -> CustomActionSetParametersOperation
Construct a CustomActionSetParametersOperation from typed writes.
Validates shape compatibility at construction time: writing a
DrillSourceField whose shape doesn't match the DrillParam
raises TypeError at the call site. DrillResetSentinel is
always shape-compatible (it writes a literal sentinel string that
the destination calc-field interprets, regardless of param shape).
Refuses an empty writes list — a no-op SetParametersOperation is almost certainly a wiring bug.
cross_sheet_drill ¶
cross_sheet_drill(action_id: str, name: str, target_sheet: SheetId, writes: list[DrillWrite], trigger: Literal['DATA_POINT_CLICK', 'DATA_POINT_MENU'] = DATA_POINT_CLICK) -> VisualCustomAction
Build a NavigationOperation + SetParametersOperation drill.
QuickSight requires a NavigationOperation before a SetParametersOperation, even when the target is the current sheet (used for same-sheet ledger→subledger filtering). This helper wraps both operations in the canonical order so callers don't re-derive the shape.
Per K.2 cleanup: the typed writes list passes through
set_drill_parameters so any shape mismatch fails here, at the
wiring site, with both sides named.
Demo persona¶
DemoPersona is the typed skeleton for the per-institution flavor
strings the handbook templates substitute (institution name +
acronym, upstream stakeholders, GL account labels, merchant names,
free-form flavor literals). Per-institution content lives in the L2
YAML's persona: block and is loaded into L2Instance.persona by
common/l2/loader.py. Empty-default fields are the "no flavor"
shape — handbook templates render neutral prose derived from L2
primitives in that case.
persona ¶
Demo persona — typed skeleton for L2-instance flavor strings.
DemoPersona collects per-institution flavor (institution name +
acronym, upstream stakeholders, GL account labels, merchant names,
free-form flavor strings) into one dataclass loaded from the L2 YAML's
persona: block. Every field defaults to the empty tuple so an L2
without a persona: block loads cleanly — the handbook templates
treat that as "no persona content" and render neutral prose derived
from the L2 primitives instead (account descriptions, role names).
Phase Q.5.e moved the bundled fixture's flavor into its YAML's
persona: block; this module no longer carries institution-specific
strings. See tests/test_persona.py for the round-trip from YAML
through L2Instance.persona to the handbook vocabulary.
GLAccount
dataclass
¶
One GL account that appears in both the demo seed and the handbook.
code is the bare prefix (e.g. gl-1010) that joins to the
seed account roster; name is the canonical display name; note
is a one-line hint surfaced in handbook prose.
DemoPersona
dataclass
¶
Per-institution flavor strings loaded from an L2 persona: block.
Each field defaults to an empty tuple — handbook templates check for non-empty before rendering persona-rich prose, falling back to neutral L2-primitive-derived prose otherwise.
institution—(name, acronym)tuple, optionalregionandlegacy_entityfollow-ons.stakeholders— flat list of upstream-counterparty display strings ("Federal Reserve Bank","the Fed"etc.).gl_accounts— typed GL display labels for the chart-of-accounts narrative.merchants— display names of merchant DDAs the seed plants.flavor— free-form persona strings (sample customer name, region descriptor, legacy-entity callout).
institution
class-attribute
instance-attribute
¶
institution: tuple[str, ...] = field(default_factory=tuple)
stakeholders
class-attribute
instance-attribute
¶
stakeholders: tuple[str, ...] = field(default_factory=tuple)
gl_accounts
class-attribute
instance-attribute
¶
gl_accounts: tuple[GLAccount, ...] = field(default_factory=tuple)
merchants
class-attribute
instance-attribute
¶
merchants: tuple[str, ...] = field(default_factory=tuple)