DAX 中的递归

2024-01-21

我不知道这是否可能,但我希望能够创建一个计算列,其中每行都依赖于其上方的行。

一个典型的例子是斐波那契数列 https://en.wikipedia.org/wiki/Fibonacci_number,其中序列由递归关系定义F(n) = F(n-1) + F(n-2)和种子F(1) = F(2) = 1.

以表格形式,

Index  Fibonacci
----------------
 1      1
 2      1
 3      2
 4      3
 5      5
 6      8
 7     13
 8     21
 9     34
10     55
...    ...

我希望能够构建Fibonacci列作为计算列。

现在,我知道斐波那契序列有一个很好的封闭形式,我可以在其中定义

Fibonacci = (((1 + SQRT(5))/2)^[Index] - ((1 - SQRT(5))/2)^[Index])/SQRT(5)

或使用帕斯卡三角形形式的浅对角线 https://en.wikipedia.org/wiki/Fibonacci_number#Use_in_mathematics:

Fibonacci =
SUMX (
    ADDCOLUMNS (
        SELECTCOLUMNS (
            GENERATESERIES ( 0, FLOOR ( ( [Index] - 1 ) / 2, 1 ) ),
            "ID", [Value]
        ),
        "BinomCoeff", IF (
            [ID] = 0,
            1,
            PRODUCTX (
                GENERATESERIES ( 1, [ID] ),
                DIVIDE ( [Index] - [ID] - [Value], [Value] )
            )
        )
    ),
    [BinomCoeff]
)

但对于一般的递归定义函数来说,情况并非如此(或者出于我实际上有兴趣使用它的目的)。


在 Excel 中,这很容易做到。你会写一个这样的公式

A3 = A2 + A1

或以 R1C1 表示法,

= R[-1]C + R[-2]C

但我就是不知道这在 DAX 中是否可行。

我尝试过的所有方法要么不起作用,要么给出循环依赖错误。例如,

Fibonacci = 
VAR n = [Index]
RETURN
IF(Table1[Index] <= 2,
    1,
    SUMX(
        FILTER(Table1,
            Table1[Index] IN {n - 1, n - 2}),
        Table1[Fibonacci]
    )
)

给出错误消息

检测到循环依赖:表 1[Fibonacci]。


Edit:

在 Marco Russo 和 Alberto Ferrari 所著的《Microsoft SQL Server Analysis Services 中的表格建模》一书中,对 DAX 进行了描述并包含以下段落:

作为一种纯函数式语言,DAX 没有命令式语句,但它利用了称为迭代器为给定表表达式的每一行执行特定表达式。这些参数与函数式语言中的 lambda 表达式很接近。但是,组合它们的方式存在限制,因此我们不能说它们对应于通用 lambda 表达式定义。尽管具有函数性质,DAX 不允许您定义新函数,也不提供递归。

看来没有直接的方法来进行递归。我仍然想知道是否有办法仍然以某种方式间接地使用父子函数 https://msdn.microsoft.com/en-us/query-bi/dax/understanding-functions-for-parent-child-hierarchies-in-dax,这看起来本质上是递归的。


Edit 2:

虽然一般递归似乎不可行,但不要忘记递归公式可能有一个很好的封闭形式,可以相当容易地导出。

以下是我使用此解决方法来回避递归公式的几个示例:

如何在PowerBI中对同一列的先前单元格进行求和 https://stackoverflow.com/questions/61257536/

DAX - 公式引用自身 https://stackoverflow.com/questions/60641059


根据您的第一个样本数据集,在我看来它就像一个“sort of“累积总计,可能可以使用 WINDOW 函数在 SQL 中轻松计算 - 我尝试了一些方法,但还没有任何结果。我对 DAX 的使用还不够多,无法判断是否可以做到。

Edit:仔细回顾一下Fibonacci sequence,事实证明我的SQL进行累积比较的代码不正确。你可以阅读SO帖子如何生成斐波那契数列 https://stackoverflow.com/questions/21746100/how-to-generate-fibonacci-series,并且它有一些好的SQL Fibonacci我测试过的答案;特别是帖子N J - answered Feb 13 '14。我不确定DAX Fibonacci递归函数能力。


SQL代码(不太正确):

DECLARE @myTable as table (Indx int)

INSERT INTO @myTable VALUES
    (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)

SELECT
    Indx
    ,SUM(myTable.Indx) OVER(ORDER BY myTable.Indx ASC ROWS BETWEEN UNBOUNDED PRECEDING and CURRENT ROW) -- + myTable.Indx
        AS [Cummulative]
    ,SUM(myTable.Indx) OVER(ORDER BY myTable.Indx ASC ROWS BETWEEN UNBOUNDED PRECEDING and 2 PRECEDING) 
        + SUM(myTable.Indx) OVER(ORDER BY myTable.Indx ASC ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) 
        AS [Fibonacci]
from @myTable myTable

结果集:

+------+-------------+-----------+
| Indx | Cummulative | Fibonacci |
+------+-------------+-----------+
| 1    | 1           | NULL      |
+------+-------------+-----------+
| 2    | 3           | NULL      |
+------+-------------+-----------+
| 3    | 6           | 4         |
+------+-------------+-----------+
| 4    | 10          | 9         |
+------+-------------+-----------+
| 5    | 15          | 16        |
+------+-------------+-----------+
| 6    | 21          | 25        |
+------+-------------+-----------+
| 7    | 28          | 36        |
+------+-------------+-----------+
| 8    | 36          | 49        |
+------+-------------+-----------+
| 9    | 45          | 64        |
+------+-------------+-----------+
| 10   | 55          | 81        |
+------+-------------+-----------+

德国DAX指数累计:

可以帮助使用 DAX 计算累积总计的链接--https://www.daxpatterns.com/cumulative-total/ https://www.daxpatterns.com/cumulative-total/。这是本文中的一些示例代码。

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

DAX 中的递归 的相关文章

  • 在DAX进行字符串大小比较

    昨天看到一个人在论坛上上求助 xff0c 想找一个方法按照一定要求对数据进行分类 分类要求是查找原始数据中的BU Type隶属于分类依据中的哪个区间 xff0c 然后输出该区间对应的Identifier值 其中AA ZZ区间指的是所有两位字
  • Power BI 矩阵总计放表第一列

    Power BI 矩阵总计放表第一列 思路 让总计序号比其他产品的序号都小 做法 1 在建个维表下方增加一行为 Total 加Total的维表 var table1 SUMMARIZE 订单表 MODEL NAME return UNION
  • Dax函数总结

    Dax函数总结 行上下文 可以理解为原始数据中 一行接着一行的排序 这个就叫行上下文 也就是藏在内部的筛选关系 这里称之为隐性筛选 切片器这种 摆在外面的控制器 来影响计算结果 筛选的条件 成为显性筛选 一 新函数 rank 返回当前上下文
  • 在Power BI中用DAX新建列的方式进行累计求和

    在Power BI中用DAX新建列的方式进行累计求和 DAX 新建列来累计求和 累计求和 DAX 新建列 DAX函数 Filter DAX函数 EARLIER DAX函数 SUMX DAX 新建列来累计求和 Power BI有两种方式进行累
  • Power BI 上个月 DAX 滚动总计

    我正在 POWER BI 中工作 并尝试计算上个月滚动总计的 DAX 表达式 我有一个过滤器 我选择某个月份 我想计算上个月的滚动总数 下面的计算非常适合计算所选日期范围的滚动总计 如何计算前几个月的滚动总额 Rolling Total C
  • 另一个变量版本最高的总和(整个数据中没有最大版本)

    我正在努力让这项措施发挥作用 我想要一个度量 仅对每栋房屋的最大版本的值进行求和 因此 请遵循此示例表 House Id Version Id Value 1 1 1000
  • 小计 <> 行总和

    我是 DAX 的新手 所以请耐心等待 用最简单的术语来说 我想将欧洲以外的所有区域的度量金额加倍 然后将结果相加 以下是 DAX 的一些示例 DEFINE measure Fact test CALCULATE IF SELECTEDVAL
  • PowerBI 动态时间序列条形图

    在这里补充我之前的问题 时间序列问题 我想在时间序列 其中包含用户设置的日期范围 上绘制单位容量图表 我试图绘制的图表如下 对于每个单元名称 我都有单元容量的开始和结束日期 如下 PowerBI 表所示 4个子问题 如何绘制这些容量随时间变
  • DAX、PowerBI 中的 RANKX() 问题

    我正在学习 DAX 并对 PowerBI 中的 RANKX 感到困惑 这是我的数据 这是我的措施 Rank RANKX ALL RankDemo Sub Category CALCULATE SUM RankDemo My Value 这是
  • 对 Power BI 中第一次出现的不同值求和

    在 Power BI 中 我的数据中有一些重复的条目 其中只有 1 列不同 这是 详细信息 列 Name Value Details Item 1 10 Feature 1 Item 1 10 Feature 2 Item 2 15 Fea
  • 函数计算已在真/假表达式中使用,该表达式用作表过滤表达式,这是不允许的

    我需要检查 ssas 表格模型中某个度量的当月和当年值 但由于类型不匹配 我无法执行此操作 为此 我创建了一个使用此 dax 查询的度量 CurrMonthYear CONCATENATE CONCATENATE concatenate y
  • DAX 测试整数

    我有一个实际值列 如下所示 ID Airport A 98 4 B 98 0 C 95 3 我正在尝试将上面的数字格式化为前端报告的百分比 我将其写在 switch 语句中 为了方便起见 我将逻辑编写为 IF 布尔值 example mea
  • dax 中选取不同值的动态总和

    以下是样本数据 Week Practice Type capacity Gen 1 BI c 80 0 1 BI c 80 1 1 BI sc 160 1 1 BI pc 240 0 1 BI pc 240 3 1 BI mc 1160 1
  • DAX 测量计算平均值及其内部参数

    我有这样的数据 App Num Days Price A1 10 100 A1 11 150 A2 11 200 A3 12 250 A3 12 300 A4 20 350 A4 21 400 天数的平均值在卡片视觉上显示为 13 857
  • 桥接表 - DAX 还是 M?

    我们应该使用 DAX 还是 M 构建桥接表 图片盗自here https stackoverflow com questions 53320431 power bi weighted average yield across 2 table
  • 在 DAX 中进行测量以计算仅适用于 Power BI 的选定月份的年初至今

    如何构建 DAX 度量来计算特定月份的 YTD 值总和 这里我们有按月份分组的事实表 FactTable 填充了实际数据和预测数据 了解实际结束时间的唯一方法是 截止日期 列 年初至今 中的信息 在表 截止日期 列 YTD 结束 中 这是一
  • DirectQuery 模式下的 AAS 表格模型性能优势

    假设您有 10 个相当大的事实表 每个 50 100 GB 应该使用 Power BI 进行查询 它们不适合 Azure Analysis Services RAM 价格合理 因此 为了使用表格模型和 AAS 您必须使用以下模式 1 Pow
  • Power Bi:如何参数化 Top N 视觉级别过滤器 [重复]

    这个问题在这里已经有答案了 Since PowerBI不支持Top N过滤page level 我想要使用 N 作为参数针对多个视觉效果立即更改它 是否可以 P S In 提供了更复杂情况的解决方案 最后本文 https www sqlbi
  • DAX 度量:动态地仅首先考虑每个组,然后总体返回其计数

    我们正在努力解决一个可能比我想象的更简单的问题 我只是被困住了 问题包括定义一个DAX Measure that 动态地仅计数first期间访问量对于每位患者 访问次数是不是第一期间必须是分配空白 价值 在讨论目标之前 请让我介绍一下场景
  • 如何仅在筛选记录上使用 power bi 中的 MAX 函数?

    我试图选择具有最新日期的记录 数据库中的所有记录都有这些基本列 AssetNumber WorkOrderNumber ScheduledEndDate Department 我想查找特定部门中每项资产的所有最新工单 日期 我有一个基本的措

随机推荐

  • 如何在 Woocommerce 中的自定义产品类型中添加“变体”选项卡?

    I ve installed a plugin for Gift Cards which is basically adding a product type Gift card 我需要增强它的功能 还有其他选项卡可用于此 但选项卡 变体
  • 使用 Screen 和 Bash 进行多重处理

    使用 SSH 在学校的不同节点上运行 python 脚本 每个节点有 8 个核心 我使用 GNU Screen 能够从单个进程中分离出来 是否更可取的是 运行几个不同的屏幕会话 运行单屏进程并使用 在 bash 终端中 它们相等吗 我不确定
  • Jax-rs自动解码路径参数

    我有一个 jax rs 服务 它接收路径中的一组参数 pathparameters 这些参数可能是包含不适合 url 的值的字符串 因此它们在客户端使用 java net UrlEncoder 进行 urlencode 如下所示 Strin
  • reCAPTCHA:为什么我不能两次检查相同的结果?

    我的意思是 如果我检查第一个客户端输入并且没问题 则第二次检查相同输入总是错误 这是为什么 我真的需要检查两次的能力 一次用于客户端验证 第二次用于服务器端验证 提前致谢 EDIT 澄清 如果用户的输入正常并且 recaptcha 返回 t
  • 在 C# 中使用 WinSCP .NET 程序集下载文件时,SSH 主机密钥指纹...与模式不匹配...

    我正在编写一个 C 应用程序 希望最终创建一个 Windows 服务 如果我能让这个工作正常的话 来使用 SCP 从服务器下载文件 我仅限于 SCP 作为唯一的选择 我正在使用 WinSCP NET 程序集 v 5 15 3 我的 PC 和
  • 什么 JDBC 属性对应于 mysql 命令行“--skip-secureauth”选项?

    我有一个遗留数据库 需要从命令提示符这样连接 mysql uUserName hHostName pPassword P3307 A Schema skip secure auth 如何在 JDBC 属性中指定相同的内容 skip secu
  • 使用.net 5.0构建时出现MSB3644错误

    安装 net 5 0 dotnet cli 后可以工作 但在创建新项目后dotnet build因错误而失败error MSB3644 The reference assemblies for framework NETFramework
  • MVC3 中的 Html.Partial 或 Html.RenderPartial?

    即使看到以下解释后我也完全困惑 div Html Partial FeaturedProduct div 部分视图可以在布局页面 或者如果使用 MVC 2 3 w ASPX 母版页 以及常规视图内呈现 在某些情况下 您可能希望退出并直接写入
  • 如何将 C++ 代码中定义的单例对象的信号连接到 QML 组件?

    我的主要目标是在 qml 文件中定义 QML 组件时接收来自单例对象的信号 假设我在 C 代码中定义了一个单例对象 如下所示 class MySingleton public QObject Q OBJECT Q PROPERTY QStr
  • Python 中的控制图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前经常使用 R统计过程控制 http en wikipedia org wiki Statistic
  • 水晶报表隐藏列

    我有一个包含几列的水晶报告 我需要隐藏一列并根据条件删除空白 目前我所做的是 我已将字段拖放到 TextObject 内 并勾选 抑制嵌入式空白字段行 和 Can Grow 它将隐藏详细信息字段并删除空格 但问题是标题仍然可见 隐藏列的条件
  • 如何在 Oracle 中向日期添加前导零?

    如果数字少于两位数 我需要在数字中添加前导零 并将两个这样的数字组合成一个数字 并且它们之间没有空格 我的尝试 select extract year from t Dt to char extract month from t Dt 09
  • Lucene.Net 和孵化状态

    我正在评估各种选项 以使我们的 Net 网站上的搜索功能更加强大 我需要研究一下我们是否购买软件 硬件 例如 Google Search Appliance GSA 还是使用 Lucene Net 等框架来开发解决方案 我们是一家初创公司
  • 阻止 Xcode 从静态库中删除未使用的符号

    我已经构建了一个静态库 我的 iOS 二进制文件正在链接其中 静态库的代码剥离已关闭 等等 我可以看到存档中的符号 通过 nm 因此 我将该库作为框架链接到我的应用程序中 但是 我实际上并没有直接调用该函数 因此 我可以看到我在二进制文件中
  • 如何将所有请求重定向到 laravel 5 中的 public/ 文件夹

    我有一个经典的 Laravel 5 项目结构 我需要将所有请求重定向到public 我处于经典的托管环境中 所以public 是我的文档根目录的子文件夹 我想这可以通过 htaccess 完成 但我仍然需要弄清楚如何完成 有人可以帮忙吗 T
  • Spring 上的嵌套事务

    在使用嵌套 Spring 事务时 我发现了一些奇怪的行为 当在同一个类中 一个方法注释为 Transactional调用另一个方法也注释为 Transactional不使用第二个注释 让我们考虑下面的类 public class Main
  • 如何在 Windows 7 x64 上的 python 3.4 中使用 OpenCV? [复制]

    这个问题在这里已经有答案了 I have windows 7 x64 and python 3 4 我尝试使用cv2 module import numpy as np import cv2 img cv2 imread messi5 jp
  • 如何为maven中属性集下声明的属性设置类路径

    我正在努力从 ant 构建工具转换为 Maven 工具 Ant build xml 已通过以下方式初始化属性
  • parse_dates 如何与 pd.read_sql_query 一起使用

    从 MySQL 数据库检索数据时 Pandas parse date 应该如何工作 的文档熊猫0 23 https pandas pydata org pandas docs stable generated pandas read sql
  • DAX 中的递归

    我不知道这是否可能 但我希望能够创建一个计算列 其中每行都依赖于其上方的行 一个典型的例子是斐波那契数列 https en wikipedia org wiki Fibonacci number 其中序列由递归关系定义F n F n 1 F