优化“where date Between”类型查询的 Dax 和模型

2024-01-24

我正在构建一个模型以允许报告两个单独的数据集,在本例中,我们将说学生数据集和员工数据集。

数据集非常独立,两者之间唯一真正的联系是日期,因此从模型的角度来看,有一个学生星型模式和一个员工星型模式。

显示的数据是快照类型数据,回答如下问题: - 对于选定的日期,显示所有在职员工 - 对于选定的日期,显示所有注册的学生

这意味着,当选择单个日期时,模型会查找所选日期在就业开始和结束日期内的所有员工,并查找所选日期在注册开始和结束日期内的所有学生。

这意味着我必须做出决定,如何使用单个日期维度从每个模式返回正确的数据。创建关系不起作用,因为表格中的关系不允许“之间”类型查询,因此我有一个不相关的日期维度,并且每个模型的 Dax 找到适用的行。

问题是它不是性能最好的。对于大约 50k 行,添加一个度量可能需要 5-10 秒。

我问是否有更好的方法来编写查询,或者更改模型以仍然让我执行“之间”样式查询但提供更好的性能。

以下是 dax 查询的示例,用于返回在特定日期注册的所有学生。

感谢您的任何建议。

All Enrolled Students:=IF (
HASONEVALUE ( 'Date'[Date] ),
CALCULATE (
    DISTINCTCOUNT ( 'Students'[StudentID] ),
    FILTER (
        'Students',
        'Students'[StudentStartDateID] <= MIN ( 'Date'[DateID] )
            && 'Students'[StudentEndDateID] >= MAX ( 'Date'[DateID] )
    )
),
BLANK ())

在某些情况下,不相关或“断开连接”的表非常适合为切片器、时间线和过滤器提供动力。正如您在问题中所说,您有两个优化选项:重新构建您的数据集 or 优化现有测量语法.

重构数据集

复制开始日期和结束日期之间每一天的每一行,并有一列表示该迭代日期。这可以通过多种方式完成,具体取决于您获取数据集的方式,但可能很乏味。然后,将表与该迭代日期相关联,并使用该关系从“日期”过滤到“事实”。如果这是一个定期报告和/或您正在使用 SQL 来提取数据,那么利用 PowerPivot 的关系计算能力可能是值得的。

优化DAX语句

如果这是一次性请求,或者数据集太繁琐而无法每天复制,那么请坚持使用断开连接的表方法并清理度量语法。由于您已经包含了 MIN() 和 MAX() 函数,并且您的 CALCULATE() 返回 DISTINCTCOUNT(),因此条件 HASONEVALUE() 函数是不必要的。我在模拟环境中运行了此程序并获得了良好的结果,但这可能会因计算机性能和数据集大小而异。请参阅下面的清理语法。

All Enrolled Students:=CALCULATE (
    DISTINCTCOUNT('Students'[StudentID]),
    FILTER(
        'Students',
        'Students'[StudentStartDateID]<= MIN('Date'[DateID]) &&
        'Students'[StudentEndDateID]  >= MAX('Date'[DateID])
    )
)

如果您的 StudentID 列是唯一的(这对我来说有意义),您可以进一步加快速度。

All Enrolled Students:=CALCULATE (
    COUNT('Students'[StudentID]),
    FILTER(
        'Students',
        'Students'[StudentStartDateID]<= MIN('Date'[DateID]) &&
        'Students'[StudentEndDateID]  >= MAX('Date'[DateID])
    )
)

如果 StudentID 不是数字,请将 COUNT() 替换为 COUNTA() 以获得所需的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化“where date Between”类型查询的 Dax 和模型 的相关文章

  • 将表列移动到新表并在 PostgreSQL 中作为外键引用

    假设我们有一个包含字段的数据库表 id category subcategory brand name description etc 创建单独的表的好方法是什么category subcategory and brand以及原始表中相应的
  • DB2 的数据模型工具

    我在 DB2 中创建了一个数据库和具有关系的表 我想根据我在 DB2 中的数据库设计创建一个 ER 图 MS SQL 有一种从 DB 模式创建 ER 图的工具 但 DB2 似乎没有 至少据我所知 有人知道 DB2 本身有任何开源工具 设施吗
  • 如何在 Power BI 中按度量筛选结果

    我需要能够按度量进行筛选 以便在 Power BI 中显示更精细的结果 我希望能够选择百分比在某个范围内的位置 或者 100 我对度量的计算是这样的 每列只能是 1 或 0 errorPercentage CALCULATE SUM mis
  • Power BI 中的排序堆栈条形图

    我使用堆积条形图来展示各个地区的性别比例 这里的图例是性别 轴是区域 值是人数 当我想根据女性性别值对图表进行排序时 仅根据人数值进行排序 我如何按百分比值对其进行排序 请帮我 编辑 我的第一个答案只关注计数 现在我已经考虑到OP想要按女性
  • DAX 条件运行总计

    我有一个包含 2 列的表 ID and Numbers 我想创建一个新专栏Result与数字列的运行总计 但每次运行总计超过 20 时 应重新启动运行总计 此外 如果运行总计低于 20 则不应显示结果 这必须仅使用 DAX 来完成 谢谢指教
  • MDX - NON EMPTY 函数更快?

    我当时的假设是NON EMPTY必须尽可能避免使用该子句 因此 当我意外地发现它实际上使查询速度更快时 我感到震惊 示例如下 select Measures Count Of Requests on 0 Client Client Numb
  • Firebase 的喜欢/不喜欢功能

    该系统本身很容易理解 但实施起来却很棘手 此外 安全原因让我思考如何做到这一点 我正在考虑让该功能在前端 Firebase 脚本中工作 只需执行所有操作即可检查该用户是否已经发布了喜欢 不喜欢的内容 并在用户单击时删除 添加 切换 问题在于
  • DAX 测试整数

    我有一个实际值列 如下所示 ID Airport A 98 4 B 98 0 C 95 3 我正在尝试将上面的数字格式化为前端报告的百分比 我将其写在 switch 语句中 为了方便起见 我将逻辑编写为 IF 布尔值 example mea
  • DAX 相当于 Excel PERCENTRANK.INC 每个类别

    我想在 DAX 中计算 Excel 函数 PERCENTRANK INC 的等效项 但按类别计算 我承认我什至不知道如何计算类别 任何提示将不胜感激 以下是示例数据的 M 代码 let Source Table FromRows Json
  • MongoDB:使用不同的值进行更新和插入

    一些背景信息 我为每个用户都有一个文档 其中包含一个数组 其中包含与用户相关的最新 20 个事件 由于 MongoDB 没有此功能 限制文档内的数组 我将推送我的事件并弹出最新的事件 我的问题 初始化文档 又名用空值填充数组 我想原子地 创
  • 使用截然不同的需要了解的信息集对产品进行建模并将它们链接到订单项?

    我目前正在一个网站上工作 该网站销售各种类型的定制产品 我已经得到了通用的标准购物车模式 订单有许多 LineItems LineItems 有一个产品 但我遇到了一些症结 假设我们的一个产品是一个球 而我们的一个产品是一盒蜡笔 当人们创建
  • 如何在 Neo4j 中使用类型层次结构?

    Neo4j 中是否有某种方法可以对类型层次结构进行建模 例如 如果我想构建汽车的类层次结构 我可能有一个 Car 基类型 然后有扩展它的子类 例如 SportCar 等 我希望能够创建 SportCar 的实例 但运行查询来获取所有 Car
  • 如何保持数据库表中记录的顺序

    我正在创建一个数据库表 该表将存储最终将显示在网页上的菜单链接 我的问题是我想控制菜单项的顺序 我可以有一个名为 order 的字段 但每次我有一个新的菜单链接时 我都必须插入 order 并将所有具有更高 order 的记录更改为 1 例
  • 在 DAX 或 Power Query 中自引用列

    我希望在 power query 或 DAX 中创建下表的 D 列 您可以在单元格中看到 Excel 公式 我需要从当前行添加列 并在上面添加先前计算的行 该专栏是自引用的 我被困住了 不知道如何继续 任何帮助 将不胜感激 您无法在 DAX
  • DAX 度量:动态地仅首先考虑每个组,然后总体返回其计数

    我们正在努力解决一个可能比我想象的更简单的问题 我只是被困住了 问题包括定义一个DAX Measure that 动态地仅计数first期间访问量对于每位患者 访问次数是不是第一期间必须是分配空白 价值 在讨论目标之前 请让我介绍一下场景
  • PowerPivot 中的滚动 12 个月总和

    在 PowerPivot Excel 2016 中 我编写了滚动 12 个月销售额总和的公式 如下所示 Rolling Sum CALCULATE Sales DATESBETWEEN Sales Date FIRSTDATE DATEAD
  • 请注意,文档的某些部分可能包含文档检查器无法删除的个人信息

    I use Excel 2013 and Power View and SQL Server 2008 R2 创建我的后Data Source and my chart in Excel当我想要保存 Excel 文件时 我收到此消息 be
  • 从 CREATE TABLE SQL 生成图形模式表示

    我有一个包含许多 CREATE TABLE 语句的 sql 文件 没有参考规范 MyISAM 的东西 但我喜欢创建不同的表框 然后手动组成表关系 我正在使用Mac 有免费的程序可以做到这一点吗 是的MySQL工作台 http dev mys
  • Rails 建模:将 HABTM 转换为 has_many :through

    我正在现有的 Rails 站点上进行维护工作 并且遇到了一些由多对多关联引起的问题 看起来该网站最初是使用has and belongs to many对于一些业务逻辑变得更加复杂的关系 所以我需要使用has many through而是支
  • PowerBI区分空白值和0值

    有没有办法区分列中的空白值和列中的 0 值 当我使用 if 语句进行测试时 它们被视为相同的值 有什么建议吗 就在这里 在计算列中 首先测试值是否为空 然后测试是否为零 因此 创建一个标志并通过它过滤您的总和度量 即 No blanks s

随机推荐