本部分提供了一些示例,这些示例演示了在以下情况下如何使用 DAX 公式。
执行复杂计算
处理文本和日期
条件值和测试错误
使用时间智能
对值进行排名和比较
访问Dax 资源中心 Wiki ,可在其中找到有关 DAX 的各种信息,包括由行业领先的专业人士和 Microsoft 提供的博客、示例、白皮书和视频。
DAX 公式可以执行复杂计算,涉及自定义聚合、筛选和使用条件值。 本部分提供了有关如何开始使用自定义计算的示例。
计算和 CALCULATETABLE 是可用于定义计算字段的功能强大且灵活的函数。 这些函数允许你更改将在其中执行计算的上下文。 你还可以自定义要执行的聚合或数学运算的类型。 有关示例,请参阅以下主题。
在 DAX 函数将一个表作为参数的大多数位置中,通常可以通过使用 FILTER 函数而不是表名称来传递筛选的表,或者将筛选器表达式指定为函数参数之一。
以下主题提供了有关如何创建筛选器以及筛选器如何影响公式结果的示例。 有关详细信息,请参阅在 DAX 公式中筛选数据。
FILTER 函数允许你使用表达式指定筛选条件,
通过在公式中创建动态筛选器,你可以轻松地回答以下问题:
当前产品销售额占总销售额的总销售额是多少?
与其他部门相比,该部门对所有工作年度总利润有多大贡献?
在数据透视表中使用的公式可能会受到数据透视表上下文的影响,但您可以通过添加或删除筛选器来有选择地更改上下文。 '全部' 主题中的示例演示了如何执行此操作。 若要在所有经销商的销售额上查找特定经销商的销售额比率,请创建一个度量值,用于计算当前上下文的值除以 '所有上下文' 的值。
ALLEXCEPT 主题提供了如何在公式中选择性地清除筛选器的示例。 两个示例都将指导你完成结果的更改,具体取决于数据透视表的设计。
有关如何计算比率和百分比的其他示例,请参阅以下主题:
除了在计算中使用当前上下文中的值,DAX 还可以在创建一组相关计算中使用上一个循环中的值。 以下主题提供了一个演练,介绍了如何生成一个公式,该公式引用来自外部循环的值。 以前的函数最多支持两级嵌套循环。
若要了解有关行上下文和相关表以及如何在公式中使用此概念的详细信息,请参阅DAX 公式中的上下文。
本部分提供了指向 DAX 参考主题的链接,这些主题包含涉及处理文本、提取和撰写日期和时间值或基于条件创建值的常见方案的示例。
Power Pivot 不允许复合键;因此,如果你的数据源中有组合键,可能需要将它们合并为单个键列。 以下主题提供了一个有关如何基于组合键创建计算列的示例。
Power Pivot 使用 SQL Server 日期/时间数据类型处理日期;因此,如果你的外部数据包含格式不同的日期(例如,如果你的日期以不受 Power Pivot 数据引擎识别的区域日期格式编写),或者你的数据使用整数代理键,则你可能需要使用 DAX 公式来提取日期部分,然后将部分组成有效的日期/时间表示形式。
例如,如果您有一列日期表示为整数,然后导入为文本字符串,则可以使用以下公式将字符串转换为日期/时间值:
= DATE (向右([Value1],4),向左([Value1],2),MID ([value1],2),MID ([value1],2))
Value1 | 结果 |
---|---|
01032009 | 1/3/2009 |
12132008 | 12/13/2008 |
06252007 | 6/25/2007 |
以下主题提供了有关用于提取和撰写日期的函数的详细信息。
如果数据包含未以标准 Windows 文本格式表示的日期或数字,则可以定义自定义格式以确保正确处理值。 将值转换为字符串或从字符串转换时,将使用这些格式。 以下主题还提供可用于处理日期和数字的预定义格式的详细列表。
在 Power Pivot 中,输出的数据类型由源列确定,并且不能显式指定结果的数据类型,因为最佳数据类型由 Power Pivot 确定。 但是,你可以使用由 Power Pivot 执行的隐式数据类型转换来操作输出数据类型。 有关类型转换的详细信息,请参阅获取 DAX 和数据模型教程的示例数据。
若要将日期或数字字符串转换为数字,请乘以1.0。 例如,下面的公式计算当前日期减去3天,然后输出相应的整数值。
= (TODAY ()-3) * 1。0
若要将日期、数字或货币值转换为字符串,请将该值与空字符串连接。 例如,下面的公式将今天的日期返回为字符串。
= '' & 今天()
以下函数还可用于确保返回特定的数据类型:
将实数转换为整数
将实数、整数或日期转换为字符串
将字符串转换为实数或日期
与 Excel 一样,DAX 还具有允许你测试数据中的值并根据条件返回不同值的函数。 例如,您可以创建一个计算列,将销售商标记为首选或值,具体取决于年度销售额。 测试值的函数也可用于检查值的范围或类型,以防止意外的数据错误中断计算。
你可以使用嵌套 IF 条件测试值并按条件生成新值。 以下主题包含条件处理和条件值的一些简单示例:
与 Excel 不同,计算列的一行中的值不能是有效值,另一行中的值无效。 也就是说,如果 Power Pivot 列的任何部分出现错误,则整个列将带有错误标记,因此必须始终更正导致无效值的公式错误。
例如,如果创建一个由零除的公式,则可能会获得无穷大结果或错误。 如果函数预期数值时遇到空值,则某些公式也会失败。 在开发数据模型时,最好允许出现错误,以便您可以单击邮件并解决问题。 但是,当发布工作簿时,应合并错误处理以防止意外值导致计算失败。
若要避免返回计算列中的错误,请使用逻辑 and 信息函数的组合来测试错误,并始终返回有效值。 以下主题提供了有关如何在 DAX 中执行此操作的一些简单示例:
DAX 时间智能函数包括可帮助你从数据中检索日期或日期范围的函数。 然后,您可以使用这些日期或日期范围计算类似期间内的值。 时间智能函数还包括可处理标准日期间隔的函数,以使你可以比较月份、年份或季度中的值。 您还可以创建一个公式,比较指定期间的第一个和最后一个日期的值。
有关所有时间智能函数的列表,请参阅时间智能函数(DAX)。 有关如何在 Power Pivot 分析中有效使用日期和时间的提示,请参阅Power Pivot 中的日期。
以下主题包含如何计算期末余额和期初余额的示例。 这些示例允许你跨不同的间隔(如天数、月数、季度数或年数)创建运行余额。
以下主题包含如何比较不同时段内的总和的示例。 DAX 支持的默认时间段是月、季度和年。
有关如何检索自定义日期范围(例如,开始促销后的前15天)的示例,请参阅以下主题。
如果使用 time 智能函数检索自定义日期集,则可以将该日期集用作执行计算的函数的输入,以在时间段内创建自定义聚合。 有关如何执行此操作的示例,请参阅以下主题:
注意: 如果不需要指定自定义日期范围,但使用的是标准会计单位(如月份、季度或年份),我们建议你使用为此用途设计的时间智能函数(如 TOTALQTD)执行计算。TOTALMTD、TOTALQTD 等。
若要仅显示列或数据透视表中的前 n 个项目,您有以下几种选择:
可以使用 Excel 2010 中的功能创建顶部筛选器。 您也可以在数据透视表中选择多个上限值或下限值。 本节的第一部分介绍如何筛选数据透视表中的前10项。 有关详细信息,请参阅 Excel 文档。
你可以创建一个对值进行动态排名的公式,然后按排名值进行筛选,或将排名值用作切片器。 本节的第二部分介绍如何创建此公式,然后在切片器中使用该排序。
每种方法都有优缺点。
Excel Top 筛选器易于使用,但筛选器仅用于显示目的。 如果数据透视表基础数据发生更改,则必须手动刷新数据透视表才能看到所做的更改。 如果需要动态使用排名,可以使用 DAX 创建一个公式,该公式将值与列中的其他值进行比较。
DAX 公式更强大;此外,通过将排名值添加到切片器,只需单击切片器即可更改显示的上限值的数量。 但是,计算成本很高,此方法可能不适合包含多行的表。
在数据透视表中显示上限或下限值
|
以下主题包含如何使用 DAX 创建存储在计算列中的排名的示例。 由于 DAX 公式是动态计算的,因此即使基础数据已更改,你也可以始终确保级别正确。 此外,由于公式在计算列中使用,因此你可以使用切片器中的排名,然后选择 '前5个'、'前10个' 或 '顶部最大的100值'。
注意: 本页面是自动翻译的,可能包含语法错误或不准确之处。 我们的目的是使此内容能对你有所帮助。 能否告知我们此信息是否有所帮助? 下面是该参考内容的英文版。
联系客服