首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含自身的自联接表,直到'Nulled‘结束

问包含自身的自联接表,直到'Nulled‘结束
EN

Stack Overflow用户
提问于 2018-08-18 00:58:48
回答 2查看 253关注 0票数 0

我正在寻找一种方法(使用SQL或DAX)来自我联接一个表,直到它为空。

一个例子可能是描述问题的最简单的方法:假设我们有一个参考表,如下所示:

代码语言:javascript
复制
Name    Next Youngest Sibling
Aaron   Nicole
Nicole  Bobby

由此,我想生成一个连接,将该表展平,如下所示:

代码语言:javascript
复制
Name    Next Sibling    Next X 2 Sibling    Next x 3 Sibling
Aaron   Nicole          Bobby               Null
Nicole  Bobby           Null                Null
Bobby   Null            Null                Null

显然,这可以通过3次手动连接来完成,但我正在寻找一种方法来动态地实现这一点,这样它就可以生成所需的任意数量的"Next x X“列,以便在结果集中的每一行上”Null“。

谢谢,

哑光

EN

回答 2

Stack Overflow用户

发布于 2018-08-18 02:12:31

这可以通过DAX中的PATH() and PATHITEMREVERSE()函数来完成。

​

​

要获取每行的完整路径,请执行以下操作:

代码语言:javascript
复制
All Names = PATH(People[Name], People[Next Youngest Sibling])

它将是一个以竖线(|)分隔的字符串;在本例中,它的顺序是相反的,因为同级概念与默认的父子概念相反。

获取Next Sibling和Next X 2 Sibling

代码语言:javascript
复制
Next Sibling = PATHITEMREVERSE(People[All Names], 2)
Next X 2 Sibling = PATHITEMREVERSE(People[All Names], 3)

其中将从路径字符串的右侧执行查找。

限制:结束节点也需要出现在表中,因此需要额外的Bobby, Bobby行;否则PATH()函数将返回错误。

票数 3
EN

Stack Overflow用户

发布于 2018-08-18 01:45:33

之后,您必须自己进行旋转,但您可以在DAX中按照以下行创建此旋转的柱状形式:

代码语言:javascript
复制
Nulled = ADDCOLUMNS(
            CROSSJOIN(
                VALUES(Siblings[Name]),
                SELECTCOLUMNS(GENERATESERIES(1, COUNT(Siblings[Name])), "Nth", [Value])),
            "Sibling", LOOKUPVALUE(Siblings[Name],
                           Siblings[Rank], [Nth] + RANK.EQ([Name], Siblings[Name], ASC)),
            "Column", IF([Nth] = 1, "Next", "Next x " & [Nth]) & " Sibling")

这里假设您已经在原始Siblings表中添加了一个Rank列。

这里的关键是进行交叉联接,以获得所需的表大小,然后定义Sibling。

​

​

如果您将空值转换为空字符串,那么这在矩阵可视化中工作得很好,其中Name位于行上,Column位于列上。(如果不替换空值,视觉效果将不会显示最后一行或最后一列,因为它们都是空白的。)

​

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51899964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档