DAX 查询

您所在的位置:网站首页 DAX运算符 DAX 查询

DAX 查询

2023-10-07 20:44| 来源: 网络整理| 查看: 265

DAX 查询 项目 04/06/2023

每当在报表上放置字段或应用筛选器时,报表客户端(如 Power BI 和 Excel)都会执行 DAX 查询。 通过使用 SQL Server Management Studio (SSMS)、Power BI 报表生成器和开源工具(如 DAX Studio),可以创建和运行你自己的 DAX 查询。 DAX 查询直接在工具内以表格形式返回结果,让你可以快速创建 DAX 公式并测试其性能。

在学习查询前,请务必牢固掌握 DAX 基础知识。 如果还没有,请务必查看 DAX 概述。

关键字

DAX 查询的语法很简单,今年包含一个必需关键字 EVALUATE 以及几个可选关键字:ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE 和 COLUMN。 每个关键字都定义一个在查询期间使用的语句。

EVALUATE(必填)

在最基本的层面上,一个 DAX 查询是包含表表达式的一条 EVALUATE 语句。 至少需要一个 EVALUATE 语句,但一个查询可以包含任意数量的 EVALUATE 语句。

EVALUATE 语法 EVALUATE EVALUATE 参数 术语 定义 表 表表达式。 EVALUATE 示例 EVALUATE 'Internet Sales'

以表的形式返回 Internet Sales 表中的所有行和列。

ORDER BY(可选)

ORDER BY(可选)关键字定义一个或多个用于对查询结果排序的表达式。 针对结果的每一行都可以计算的任何表达式都是有效的。

ORDER BY 语法 EVALUATE [ORDER BY { [{ASC | DESC}]}[, …]] ORDER BY 参数 术语 定义 表达式 任何返回单个标量值的 DAX 表达式。 ASC (默认)升序排序。 DESC 降序排序。 ORDER BY 示例 EVALUATE 'Internet Sales' ORDER BY 'Internet Sales'[Order Date]

以表的形式返回 Internet Sales 表中的所有行和列,按 Order Date 升序排序。

START AT(可选)

START AT(可选)关键字用于 ORDER BY 子句内 。 它定义查询结果开始的值。

START AT 语法 EVALUATE [ORDER BY { [{ASC | DESC}]}[, …] [START AT {|} [, …]]] START AT 参数 术语 定义 值 常数值。 不能是表达式。 参数 以 @ 字符为前缀的 XMLA 语句中参数的名称。 START AT 备注

START AT 参数与 ORDER BY 子句中的列具有一对一的对应关系。 START AT 子句中参数的数量可以与 ORDER BY 子句中参数的数量一样多,但不能超过 ORDER BY 子句中参数的数量。 START AT 中的第一个参数定义了 ORDER BY 列的列 1 中的起始值。 START AT 中的第二个参数定义满足列 1 的第一个值的行中 ORDER BY 列的列 2 中的起始值。

START AT 示例 EVALUATE 'Internet Sales' ORDER BY 'Internet Sales'[Sales Order Number] START AT "SO7000"

从 SO7000 开始返回 Internet Sales 表中的所有行和列,按 Sales Order 升序排序。

DEFINE(可选)

可选的 DEFINE 关键字引入一个或多个计算实体定义,这些定义仅在查询期间存在。 定义位于 EVALUATE 语句的前面,并且对查询中的所有 EVALUATE 语句都有效。 定义可以是变量、度量值、表1和列1。 定义可以引用出现在当前定义之前或之后的其他定义。 如果查询中包含 DEFINE 关键字,则至少需要一个定义。

DEFINE 语法 [DEFINE ( (MEASURE [] = ) | (VAR = ) | (TABLE = ) | (COLUMN [] = ) | ) + ] (EVALUATE ) + DEFINE 参数 术语 定义 实体 MEASURE、VAR、TABLE1 或 COLUMN1。 name 度量值、变量、表或列定义的名称。 它不能是表达式。 此名称不必是唯一的。 此名称仅在查询期间存在。 表达式 任何返回表或标量值的 DAX 表达式。 表达式可以使用任何定义的实体。 如果需要将标量表达式转换为表表达式,请使用大括号 {} 将表达式包装在表构造函数中,或使用 ROW() 函数返回一个具有单行的表。

[1]警告:查询范围内的 TABLE 和 COLUMN 定义仅供内部使用。 虽然可以在不出现语法错误的情况下为查询定义 TABLE 和 COLUMN 表达式,但它们可能会产生运行时错误,因此不建议这样做。

DEFINE 备注

一个 DAX 查询可以有多个 EVALUATE 语句,但只能有一个 DEFINE 语句。 DEFINE 语句中的定义可应用于查询中的任何 EVALUATE 语句。

DEFINE 语句中至少需要有一个定义。

查询的度量值定义会覆盖名称相同的模型度量值,但仅在查询内使用。 它们不会影响模型度量值。

VAR 名称具有特殊限制。 若要了解详细信息,请参阅 VAR - 参数。

DEFINE 示例 DEFINE MEASURE 'Internet Sales'[Internet Total Sales] = SUM ( 'Internet Sales'[Sales Amount] ) EVALUATE SUMMARIZECOLUMNS ( 'Date'[Calendar Year], TREATAS ( { 2013, 2014 }, 'Date'[Calendar Year] ), "Total Sales", [Internet Total Sales], "Combined Years Total Sales", CALCULATE ( [Internet Total Sales], ALLSELECTED ( 'Date'[Calendar Year] ) ) ) ORDER BY [Calendar Year]

返回计算的 2013 年和 2014 年总销售额,并将算出的 2013 年和 2014 年的总销售额合并为一个表。 DEFINE 语句中的度量值 Internet Total Sales 在 Total Sales 和 Combined Years Total Sales 表达式中都有使用。

DAX 查询中的参数

可以对定义完善的 DAX 查询语句进行参数化,然后只需更改参数值即可以反复使用。

Execute 方法 (XMLA)具有一个 Parameters 元素 (XMLA) 集合元素,可以定义参数并为其分配值。 在集合中,每个 Parameter 元素 (XMLA)都定义了参数的名称及其值。

通过为参数名称加上 @ 字符作为前缀来引用 XMLA 参数。 对于语法中允许值所在的任何位置,都可以使用参数调用来替换它。 所有 XMLA 参数都作为文本键入。

重要

在参数部分中定义但未在 元素中使用的参数在 XMLA 中将生成错误响应。 元素中使用但未定义的参数在 XMLA 中将生成错误响应。

另请参阅

DAX 语句 SUMMARIZECOLUMNS TREATAS FILTER



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3