我正在寻找一种方法(使用SQL或DAX)来自我联接一个表,直到它为空。
一个例子可能是描述问题的最简单的方法:假设我们有一个参考表,如下所示:
Name Next Youngest Sibling
Aaron Nicole
Nicole Bobby由此,我想生成一个连接,将该表展平,如下所示:
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“。
谢谢,
哑光
发布于 2018-08-18 02:12:31
这可以通过DAX中的PATH() and PATHITEMREVERSE()函数来完成。

要获取每行的完整路径,请执行以下操作:
All Names = PATH(People[Name], People[Next Youngest Sibling])它将是一个以竖线(|)分隔的字符串;在本例中,它的顺序是相反的,因为同级概念与默认的父子概念相反。
获取Next Sibling和Next X 2 Sibling
Next Sibling = PATHITEMREVERSE(People[All Names], 2)
Next X 2 Sibling = PATHITEMREVERSE(People[All Names], 3)其中将从路径字符串的右侧执行查找。
限制:结束节点也需要出现在表中,因此需要额外的Bobby, Bobby行;否则PATH()函数将返回错误。
发布于 2018-08-18 01:45:33
之后,您必须自己进行旋转,但您可以在DAX中按照以下行创建此旋转的柱状形式:
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位于列上。(如果不替换空值,视觉效果将不会显示最后一行或最后一列,因为它们都是空白的。)

https://stackoverflow.com/questions/51899964
复制相似问题