使用 M 或 DAX 生成包含数百个不同类别的单列 table
generate a one-column table that contains hundreds of different categories using M or DAX
我需要将我的产品拆分为总共 120 个预定义价格 clusters/buckets。这些集群可以重叠并且看起来有点像:
因为我不想手动写下所有这些字符串:有没有一种方便的方法可以直接使用一些代码在 M 或 DAX 中执行此操作?
提前致谢!
戴夫
您可以通过 DAX(新 Table)创建此存储桶:
Table = SELECTCOLUMNS(
GENERATE(SELECTCOLUMNS(GENERATESERIES(0,10,1),"FirstPart",[Value]), SELECTCOLUMNS(GENERATESERIES(0,10,1),"SecondPart",[Value]))
,"Bucket", [FirstPart] & " - " & [SecondPart]
)
Table = SELECTCOLUMNS(
GENERATE(SELECTCOLUMNS(GENERATESERIES(0,9,1),"FirstPart",[Value]), TOPN([FirstPart], SELECTCOLUMNS(GENERATESERIES(1,9,1),"SecondPart",[Value]), [SecondPart],ASC))
,"Bucket", [FirstPart] & " - " & [SecondPart]
)
使用 m-Query 您可以创建一个函数。打开查询编辑器。 Richt 单击并创建空查询。创建函数(忽略警告)并调用它:RowGenerator.
打开高级编辑器并输入以下代码:
let
Bron = (base as number, start as number, end as number) => let
Bron = Table.FromList(List.Generate(() => start, each _ <= end, each _ + 1), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Aangepaste kolom toegevoegd" = Table.AddColumn(Bron, "Aangepast", each Number.ToText(base) & " - " & Number.ToText([Column1]))
in
#"Aangepaste kolom toegevoegd"
in
Bron
此函数创建一个 table,其中基数是您的第一个数字,开始、结束范围。
添加另一个空查询,打开高级编辑器并粘贴:
let
Bron = List.Generate(() => 0, each _ < 5, each _ + 1),
#"Geconverteerd naar tabel" = Table.FromList(Bron, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Aangeroepen aangepaste functie" = Table.AddColumn(#"Geconverteerd naar tabel", "test", each RowGenerator(_[Column1], _[Column1] + 1, 5)),
#"test uitgevouwen" = Table.ExpandTableColumn(#"Aangeroepen aangepaste functie", "test", {"Column1", "Aangepast"}, {"Column1.1", "Price Cluster"}),
#"Kolommen verwijderd" = Table.RemoveColumns(#"test uitgevouwen",{"Column1", "Column1.1"})
in
#"Kolommen verwijderd"
这首先创建一个包含 5 行的列表,然后它为每一行调用之前创建的函数,最后一步是扩展行并删除不需要的列。
享受:
我需要将我的产品拆分为总共 120 个预定义价格 clusters/buckets。这些集群可以重叠并且看起来有点像:
因为我不想手动写下所有这些字符串:有没有一种方便的方法可以直接使用一些代码在 M 或 DAX 中执行此操作?
提前致谢! 戴夫
您可以通过 DAX(新 Table)创建此存储桶:
Table = SELECTCOLUMNS(
GENERATE(SELECTCOLUMNS(GENERATESERIES(0,10,1),"FirstPart",[Value]), SELECTCOLUMNS(GENERATESERIES(0,10,1),"SecondPart",[Value]))
,"Bucket", [FirstPart] & " - " & [SecondPart]
)
Table = SELECTCOLUMNS(
GENERATE(SELECTCOLUMNS(GENERATESERIES(0,9,1),"FirstPart",[Value]), TOPN([FirstPart], SELECTCOLUMNS(GENERATESERIES(1,9,1),"SecondPart",[Value]), [SecondPart],ASC))
,"Bucket", [FirstPart] & " - " & [SecondPart]
)
使用 m-Query 您可以创建一个函数。打开查询编辑器。 Richt 单击并创建空查询。创建函数(忽略警告)并调用它:RowGenerator.
打开高级编辑器并输入以下代码:
let
Bron = (base as number, start as number, end as number) => let
Bron = Table.FromList(List.Generate(() => start, each _ <= end, each _ + 1), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Aangepaste kolom toegevoegd" = Table.AddColumn(Bron, "Aangepast", each Number.ToText(base) & " - " & Number.ToText([Column1]))
in
#"Aangepaste kolom toegevoegd"
in
Bron
此函数创建一个 table,其中基数是您的第一个数字,开始、结束范围。
添加另一个空查询,打开高级编辑器并粘贴:
let
Bron = List.Generate(() => 0, each _ < 5, each _ + 1),
#"Geconverteerd naar tabel" = Table.FromList(Bron, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Aangeroepen aangepaste functie" = Table.AddColumn(#"Geconverteerd naar tabel", "test", each RowGenerator(_[Column1], _[Column1] + 1, 5)),
#"test uitgevouwen" = Table.ExpandTableColumn(#"Aangeroepen aangepaste functie", "test", {"Column1", "Aangepast"}, {"Column1.1", "Price Cluster"}),
#"Kolommen verwijderd" = Table.RemoveColumns(#"test uitgevouwen",{"Column1", "Column1.1"})
in
#"Kolommen verwijderd"
这首先创建一个包含 5 行的列表,然后它为每一行调用之前创建的函数,最后一步是扩展行并删除不需要的列。
享受: