dax-sql
用于Power BI / Tabular语义模型的DAX到SQL编译器:一个SQL中的DAX查询 SELECT
用DAX的语义。在DuckDB上测试了Power BI自己的答案。没有依赖关系。
最初是由 含硝酸钠Devaraj。
npm install dax-sql
import { createCompiler } from 'dax-sql';
import { tmslToModel } from 'dax-sql/formats/tmsl.js'; // or formats/ossie.js for Apache Ossie
const model = tmslToModel(JSON.parse(bimText)); // a model.bim
const dax = createCompiler(model, { tableSource: t => `read_parquet('data/${t.name}.parquet')` });
const { sql, columns } = dax.compile(`
EVALUATE
SUMMARIZECOLUMNS('Date'[Year], "Sales", [Sales Amount])
ORDER BY 'Date'[Year]`);
// sql: one SELECT for the engine; columns: [{ name: 'Year', type: 'int', ... }, { name: 'Sales', ... }]
- : 语义模型作为dax-sql的模型对象(DESIGN.md;
formats/从TMSL中读取一个model.bim或者一个 Apache澳大利亚 模型(其度量是DAX或SQL)、DAX查询或SQLSELECT在模型上,选项 (DESIGN.md); 或任何SQLSELECTS除以模型中的关系。 - : 一个SQL
SELECT和它的列;对于一条语句,它是SQL,每个语句都已编译到位。 - 错误:
SYNTAX,SEMANTIC,UNSUPPORTED。 - 测试: 反对Power BI自己的答案 一致性/。
没有实现
- 对象级安全性,动态格式字符串,窗口函数的reset参数,以及 没有列出的东西 DESIGN.md。
FORMAT仅为en-US,具有恒定模式;没有应用模型格式字符串。DATEDIFF与WEEK计算周日周边界。
从DAX出发,经过设计
- 文本在分组中区分大小写,
DISTINCT排序(按代码点,而不是区域性)和 关系;比较,IN而表过滤器则不像DAX那样。 - 文本保留尾随空格(Power BI在加载时删除它们):
"a "和"a"是两个 值,在分组中,过滤器,关系和LEN. 如果它们很重要,就在数据中删除它们。 - 混合数字和文本的列返回为文本。
IFERROR返回第一个参数:SQL没有错误值。- 只读取一个表的查询(
VALUES(Customer[City])(切片器的列表)没有空白 行,尽管事实上行有表缺少的键:它是一个plainSELECT DISTINCT。