使用 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 行的列表,然后它为每一行调用之前创建的函数,最后一步是扩展行并删除不需要的列。

享受: