Complete DataAI Function Coverage for Tableau
The dataai-spark-tableau Maven artifact depends on dataai-spark-functions, so adding the Tableau artifact makes the complete DataAI computational catalog available transitively. Algorithms are not copied into Tableau code; they remain tested once in the portable functions module.
Every DataAI function result is already a Spark Dataset<Row> or a small record containing DataFrames. Pass any result DataFrame to TableauFunctionOutputs.withRunMetadata(...), persist it under a governed table/view, and connect Tableau through Spark SQL or Databricks.
Coverage
| Function family | DataAI APIs available to Tableau pipelines | Suggested result name |
|---|---|---|
| ETL pipeline | DataAiPipeline, declarative RuleSpec validation | pipeline_* |
| Data quality | DataQualityFunctions automatic, missing, duplicate, date, outlier, category, and text checks | quality_* |
| General analytics | AnalyticsFunctions summaries, pivot, variance, ranking, correlations, regression | analytics_* |
| Time analysis | TimeSeriesFunctions summaries, moving averages, rolling totals, period changes | time_* |
| Business analytics | BusinessFunctions outliers, anomalies, drift, Pareto, cohort, funnel, KPI | business_* |
| Market models | MarketFunctions demand, pricing, elasticity, basket, segments, churn, risk, inventory, profit, scenario | market_* |
| Geographic | MapFunctions.readiness(...) and all returned readiness DataFrames | map_* |
| Matrix | MatrixFunctions.crossTab(...), MatrixFunctions.balance(...), MatrixFunctions.balanceWithMinimumDeparture(...), and MatrixFunctions.minimumDepartureAdjustment(...) | matrix_cross_tab, matrix_balance |
| Insights | InsightFunctions dictionary, chart recommendations, narratives, and alerts | insight_* |
Universal adapter
Dataset<Row> tableauResult = TableauFunctionOutputs.withRunMetadata(
dataAiFunctionResult,
"market_demand",
runId,
completedAt,
libraryVersion);
tableauResult.write()
.format("delta")
.mode(SaveMode.Overwrite)
.saveAsTable("analytics.dataai_market_demand");
The added reserved columns are:
_dataai_result_name_dataai_run_id_dataai_completed_at_dataai_library_version
The adapter rejects a result that already contains one of these names instead of silently overwriting customer data.
Matrix balancing
Matrix balancing is explicitly supported. Use balanceWithMinimumDeparture(...) when the balanced matrix also requires DataAI's minimum-departure adjustment, or call minimumDepartureAdjustment(...) on an already balanced matrix. Then use TableauFunctionOutputs.matrixBalance(...) to expose balancedCells() plus:
balance_iterationsbalance_maximum_errorbalance_converged
The output retains the DataAI matrix fields: original value, balanced value, row and column targets, balanced totals, differences, and coefficients. The complete persistence example is ../examples/java/TableauMatrixBalancingExample.java.
Tableau can visualize the balanced values as a heat map, highlight target differences, filter to non-converged runs, and compare original versus balanced values. The customer's Spark job remains responsible for convergence policy and must decide whether a non-converged result may be published.