power bi DAX 分层 table 名称串联
power bi DAX hierarchical table concatenation of names
这两天我遇到了一个问题,我无法解决,所以我来这里寻求帮助...
我有一点 dax,它基本上采用分层 table(整数)的路径,并在路径中首先采用 2 的字符串名称。
我使用的名字:
- 'HIERARCHY' 具有名称、id、路径、nbrItems、字符串的层次结构 table
- mytable / addedcolumn1/2 新的 table 用于模拟 for 循环
DisplayPath =
var __Path =PATH(ParentChild[id], ParentChild[parent_id])
var __P1 = PATHITEM(__Path,1) var __P2 = PATHITEM(__Path,2)
var l1 = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P1))
var l2a = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P2))
var l2 = if(ISBLANK(l2a), "", " -> " & l2a)
return CONCATENATE(l1,l2)
我的问题是...我不知道路径中的索引数量,可以从 0 到我猜 15...
我已经尝试了一些事情,但无法找到解决方案。
首先,我添加了一个名为 nbrItems 的新列,用于计算路径列表中的项目数。
两列:
然后我添加了一段代码,根据路径列表中的项目数模拟 for 循环,我想在其中加入
- 获取参数名称
- 将它们连接成一个字符串,我可以 return 并得到
string =
var n = 'HIERARCHY'[nbrItems]
var mytable = GENERATESERIES(1, n)
var addedcolumn1 = ADDCOLUMNS(mytable, "nom", /* missing part: get name */)
var addedcolumn2 = ADDCOLUMNS(addedcolumn1, "string", /* missing part: concatenate previous concatenated and new name */)
var mymax = MAXX(addedcolumn2, [Value])
RETURN MAXX(FILTER(addedcolumn2, [Value] = mymax), [string])
完整 table:
提前感谢您的帮助!
好吧,经过一些研究和大量的尝试和错误...我想出了一个很好而简单的解决方案:
最初的问题是我有一个分层 table ,但是所有数据都在同一个 table.
like so
我所做的是,使用此 dax 添加一个新的“父”列:
parent =
var a = 'HIERARCHY'[id_parent]
var b = CALCULATE(MIN('HIERARCHY'[libelle]), FILTER(ALL('HIERARCHY'), 'HIERARCHY'[id_h] = a))
RETURN b
这从 id_parent(参考屏幕)获取父名称。
然后我可以只使用路径功能,而不是在 id 上,而是在名称上......像这样:
path = PATH('HIERARCHY'[libelle], 'HIERARCHY'[parent])
这让问题变得简单了,因为我不需要在这之后用那里的名字替换 id...
最后为了让它看起来更漂亮,我使用了一些替换来移除管道:
formated_path = SUBSTITUTE('HIERARCHY'[path], "|", " -> ")
final result
这两天我遇到了一个问题,我无法解决,所以我来这里寻求帮助... 我有一点 dax,它基本上采用分层 table(整数)的路径,并在路径中首先采用 2 的字符串名称。
我使用的名字:
- 'HIERARCHY' 具有名称、id、路径、nbrItems、字符串的层次结构 table
- mytable / addedcolumn1/2 新的 table 用于模拟 for 循环
DisplayPath =
var __Path =PATH(ParentChild[id], ParentChild[parent_id])
var __P1 = PATHITEM(__Path,1) var __P2 = PATHITEM(__Path,2)
var l1 = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P1))
var l2a = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P2))
var l2 = if(ISBLANK(l2a), "", " -> " & l2a)
return CONCATENATE(l1,l2)
我的问题是...我不知道路径中的索引数量,可以从 0 到我猜 15... 我已经尝试了一些事情,但无法找到解决方案。 首先,我添加了一个名为 nbrItems 的新列,用于计算路径列表中的项目数。
两列:
然后我添加了一段代码,根据路径列表中的项目数模拟 for 循环,我想在其中加入
- 获取参数名称
- 将它们连接成一个字符串,我可以 return 并得到
string =
var n = 'HIERARCHY'[nbrItems]
var mytable = GENERATESERIES(1, n)
var addedcolumn1 = ADDCOLUMNS(mytable, "nom", /* missing part: get name */)
var addedcolumn2 = ADDCOLUMNS(addedcolumn1, "string", /* missing part: concatenate previous concatenated and new name */)
var mymax = MAXX(addedcolumn2, [Value])
RETURN MAXX(FILTER(addedcolumn2, [Value] = mymax), [string])
完整 table:
提前感谢您的帮助!
好吧,经过一些研究和大量的尝试和错误...我想出了一个很好而简单的解决方案: 最初的问题是我有一个分层 table ,但是所有数据都在同一个 table.
like so
我所做的是,使用此 dax 添加一个新的“父”列:
parent =
var a = 'HIERARCHY'[id_parent]
var b = CALCULATE(MIN('HIERARCHY'[libelle]), FILTER(ALL('HIERARCHY'), 'HIERARCHY'[id_h] = a))
RETURN b
这从 id_parent(参考屏幕)获取父名称。
然后我可以只使用路径功能,而不是在 id 上,而是在名称上......像这样:
path = PATH('HIERARCHY'[libelle], 'HIERARCHY'[parent])
这让问题变得简单了,因为我不需要在这之后用那里的名字替换 id...
最后为了让它看起来更漂亮,我使用了一些替换来移除管道:
formated_path = SUBSTITUTE('HIERARCHY'[path], "|", " -> ")
final result