Apache Ossie 标准函数速查表:Tableau、Looker Studio、DAX 映射完全指南
【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossie
Apache Ossie是行业级的语义元数据交换标准,为分析、AI 与 BI 平台提供厂商中立的"单一事实来源"。本文为新手整理了一份Ossie 标准函数与 Tableau、Looker Studio、DAX 的映射速查表,帮你 3 分钟查清每个函数在不同工具里叫什么,避免"同名不同义"的坑。
为什么需要 Ossie 函数映射表?
同一个 KPI,在不同工具里定义往往不一样:Tableau 里的COUNTD()、Power BI 里的DISTINCTCOUNT()、数据库里的COUNT(DISTINCT x),说的其实都是"去重计数"。
Apache Ossie(前身 Open Semantic Interchange)解决的就是这个问题:用一套基于 YAML/JSON 的 核心规范 描述语义模型,让所有工具读写同一份"标准方言"(Ossie_SQL_2026)。而本文的映射表,就是告诉你Ossie 标准函数 ↔ 各 BI 工具函数怎么对号入座,完整定义见 core-spec/expression_language.md。
先搞懂:Ossie 的函数分级标准
查表前,先记住三个合规级别(源自 core-spec/expression_language.md 的 Compliance Levels 一节):
| 级别 | 含义 | 例子 |
|---|---|---|
| REQUIRED (MUST) | 所有实现必须支持 | SUM、DATE_TRUNC、CONCAT |
| RECOMMENDED (SHOULD) | 建议支持,性能/高级场景常用 | APPROX_COUNT_DISTINCT、REGEXP_EXTRACT |
| Dialect (MAY) | 厂商方言扩展,需在模型中声明 | Snowflake / BigQuery 专属函数 |
💡关键原则:优先使用 REQUIRED 级别的核心函数写 Ossie 模型,保证可移植性;确需方言函数时,在表达式的dialects中显式声明(如ANSI_SQL、SNOWFLAKE、TABLEAU等,方言清单见 core-spec/spec.md 的 Dialects 枚举)。
聚合函数映射速查表 📊
这是日常用得最多的一类,Ossie 的SUM/COUNT/AVG等在三端几乎同名,但去重计数、标准差、百分位数差异最大:
| Ossie 标准函数 | Tableau | Looker Studio | DAX |
|---|---|---|---|
SUM(x) | SUM(x) | SUM(X) | SUM(x) |
COUNT(x) | COUNT(x) | COUNT(X) | COUNT(x) |
COUNT(DISTINCT x) | COUNTD(x) | COUNT_DISTINCT(X) | DISTINCTCOUNT(x) |
AVG(x) | AVG(x) | AVG(X) | AVERAGE(x) |
MIN(x)/MAX(x) | MIN(x)/MAX(x) | MIN(X)/MAX(X) | MIN(x)/MAX(x) |
STDDEV(x) | STDEV(x) | STDDEV(X) | STDEV.S(x) |
STDDEV_POP(x) | STDEVP(x) | STDDEV(X) | STDEV.P(x) |
VARIANCE(x) | VAR(x) | VARIANCE(X) | VAR.S(x) |
MEDIAN(x) | MEDIAN(x) | MEDIAN(X) | MEDIAN(x) |
PERCENTILE_CONT(x, 0.75) | PERCENTILE(x, 0.75) | PERCENTILE(X, 75) | PERCENTILE.INC(x, 0.75) |
⚠️新手最易踩的坑:
- DAX 的平均数是
AVERAGE而不是AVG; - Looker Studio 的
PERCENTILE第二个参数是75(百分比数字),而其他工具是0.75(小数),写反了结果完全不对; - 大数据量求近似去重数时,Ossie 提供
APPROX_COUNT_DISTINCT(x)(推荐级,误差约 2%),比精确去重快得多。
日期/时间函数映射速查表 📅
Ossie 基于 ANSI SQL:2003 定义日期函数,参数顺序是(精度, 日期, …),而 DAX 把精度放在最后,迁移时务必注意:
| Ossie 标准函数 | Tableau | Looker Studio | DAX |
|---|---|---|---|
YEAR(d)/MONTH(d)/DAY(d) | YEAR(d)/MONTH(d)/DAY(d) | YEAR(Date)/MONTH(Date)/DAY(Date) | 同名 |
DATE_TRUNC('month', d) | DATETRUNC('month', d) | TODATE(d, "YYYYMM01", "YYYYMMDD") | DATE(YEAR(d), MONTH(d), 1) |
DATEADD(day, n, d) | DATEADD('day', n, d) | DATE_ADD(d, n)(仅天数) | DATE(d) + n或DATEADD(d, n, DAY) |
DATEDIFF(day, d1, d2) | DATEDIFF('day', d1, d2) | DATE_DIFF(d1, d2) | DATEDIFF(d1, d2, DAY) |
CURRENT_DATE | TODAY() | TODAY() | TODAY() |
📌实用技巧:跨引擎移植日期表达式时,Ossie 的方言声明机制可以同时给出一份 ANSI 版和各数据库版写法(如 BigQuery 的DATE_TRUNC(d, MONTH)参数顺序与 ANSI 相反),规范中的 Common Dialect Variations 一表已列出 Snowflake、BigQuery、Databricks、PostgreSQL 的常见差异。
字符串函数映射速查表 ✏️
| Ossie 标准函数 | Tableau | Looker Studio | DAX |
|---|---|---|---|
CONCAT(a, b) | a + b | CONCAT(X, Y) | CONCATENATE(a, b)或a & b |
LENGTH(s) | LEN(s) | LENGTH(X) | LEN(s) |
LOWER(s)/UPPER(s)/TRIM(s) | 同名 | 同名 | 同名 |
LEFT(s, n)/RIGHT(s, n) | 同名 | LEFT_TEXT(X, n)/RIGHT_TEXT(X, n) | 同名 |
SUBSTRING(s, start, len) | MID(s, start, len) | SUBSTR(X, start, len) | MID(s, start, len) |
REPLACE(s, from, to) | REPLACE(s, from, to) | REPLACE(X, Y, Z) | SUBSTITUTE(s, from, to) |
CONTAINS(s, sub) | CONTAINS(s, sub) | CONTAINS_TEXT(X, text) | CONTAINSSTRING(s, sub) |
⚠️ 三个高频差异点:拼接(Tableau 用+,DAX 用&)、子串(Ossie 的SUBSTRING在 Tableau 叫MID)、查找(DAX 里是CONTAINSSTRING)。
条件函数映射速查表 🔀
| Ossie 标准函数 | Tableau | Looker Studio | DAX |
|---|---|---|---|
CASE WHEN ... END | CASE WHEN或IF | CASE WHEN | SWITCH(TRUE(), ...) |
IF(cond, t, f) | IF cond THEN t ELSE f END | 用CASE替代 | IF(cond, t, f) |
COALESCE(a, b) | IFNULL(a, b)或ZN(a) | COALESCE(...) | COALESCE(a, b) |
NULLIF(a, b) | IF a = b THEN NULL ELSE a END | 用CASE替代 | IF(a = b, BLANK(), a) |
💡Ossie 特色:除了COALESCE,Ossie 还提供了分析场景常用的ZeroIfNull(x)(空值转 0)和NullIfZero(x)(0 转空值),这在 DAX 中没有直接对应,通常要写成IF(ISBLANK(x), 0, x)。
窗口函数映射速查表 🪟
窗口函数是各工具差异最大的类别,跨工具迁移前务必查表:
| Ossie 标准函数 | Tableau | Looker Studio | DAX |
|---|---|---|---|
ROW_NUMBER() OVER(...) | INDEX() | 不支持 | RANKX(...)加 DENSE 选项 |
RANK() OVER(...) | RANK(expr) | 不支持 | RANKX(...) |
SUM(...) OVER(PARTITION BY...) | {FIXED [...]: SUM(...)} | 仅混合数据源场景 | 上下文相关 |
LAG(x, 1) OVER(ORDER BY...) | LOOKUP(x, -1) | 不支持 | CALCULATE(x, PREVIOUSDAY(...)) |
| 累计求和 | RUNNING_SUM(SUM(...)) | 不支持 | CALCULATE(SUM(...), FILTER(...)) |
📌 Looker Studio 基本不提供窗口函数,跨端迁移时建议改用"表计算"思路(如 Looker Studio 的 Comparison 计算字段);Ossie 模型中则统一用标准OVER()语法,各实现负责翻译。
动手实践:从示例模型到转换器
想亲手看标准函数长什么样,可以:
- 打开完整示例 examples/tpcds_semantic_model.yaml(TPC-DS 全量语义模型)或更小的 examples/flights.yaml,查看
metrics中用 Ossie SQL 写的表达式; - 用 validation/validate.py 校验模型是否符合 core-spec/osi-schema.json 模式;
- 参考 converters/ 下的官方转换器(dbt、GoodData、Salesforce、Snowflake 等),学习 Ossie 与具体工具格式之间的双向转换实现。
速查表之外:三条避坑建议
- 参数顺序:Ossie 的
DATEDIFF(精度, d1, d2)与 DAX 的DATEDIFF(d1, d2, 精度)首尾相反,照抄参数最易出错; - NULL 语义:
COUNT(x)只统计非空值,COUNT(*)统计全部行,这与各 BI 工具行为一致,迁移时保持原样即可; - 可分解性:Ossie 将聚合分为 Distributive(
SUM/COUNT)、Algebraic(AVG)、Holistic(MEDIAN/COUNT DISTINCT)等类别,多级聚合或预计算场景下,Holistic 类函数无法简单合并,选函数时要留意。
掌握这份Apache Ossie 标准函数映射速查表后,你在 Tableau、Looker Studio 和 Power BI(DAX)之间的函数迁移就能"对着表抄",语义模型一次定义、多端复用 🎯
【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossie
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考