如何在 table 中多次重复行

How do you repeat rows in a table multiple time

我创建了一个 table DAX Studio 并想在一个新的 table 中重复所有行(包括所有列)多次;由我选择。

//create temp table of Historic Facilities for all annual groups 1 to 3            
 TABLE HistFac =
    ADDCOLUMNS ( FacSchHist,
       "Rank", RANKX ( FacSchHist, [WtAvg] ),        
       "Annual Group", (RANKX ( FacSchHist, [WtAvg] ) - FLOOR((RANKX ( FacSchHist, [WtAvg] ) - 1) /3 * 3,3)))

EVALUATE
NonHistFac
ORDER BY [Annual Group],
[WtAvg] DESC

我想在重复列表中保持原来的顺序。显然有很多方法可以构造一个 table (见上面的代码);但是,如何重复行列表?

感谢您的任何建议。

您可以使用 GENERATE 来重复行:

DEFINE
    TABLE HistFac =
        GENERATE (
            { 1, 2, 3 },
            ADDCOLUMNS (
                FacSchHist,
                "Rank", RANKX ( FacSchHist, [WtAvg] ),
                "Annual Group",
                    (
                        RANKX ( FacSchHist, [WtAvg] )
                            - FLOOR ( ( RANKX ( FacSchHist, [WtAvg] ) - 1 ) / 3 * 3, 3 )
                    )
            )
        )
EVALUATE
NonHistFac
ORDER BY
    [Annual Group],
    [WtAvg] DESC

编写此代码的更好方法是使用嵌套的 ADDCOLUMNS:

DEFINE
    TABLE HistFac =
        GENERATE (
            { 1, 2, 3 },
            ADDCOLUMNS (
                ADDCOLUMNS ( FacSchHist, "@Rank", RANKX ( FacSchHist, [WtAvg] ) ),
                "Annual Group",
                    [@Rank]
                        - FLOOR ( ( [@Rank] - 1 ) / 3 * 3, 3 )
            )
        )
EVALUATE
NonHistFac
ORDER BY
    [Annual Group],
    [WtAvg] DESC

AntrikshSharma - 我现在就试试看,感谢您的指导。

好的,代码运行良好;但是发现了一个问题。在列表初始排名之后和复制之前 - 我不想继续排名。

换句话说,我希望在没有任何进一步排名的情况下将初始排名列表复制 3 倍;只是让每个重复出现的事件以准确的顺序出现在初始列表之后。

如果初始列表为 12345,则为 12345,12345,12345 - 也感谢您提供更高效的代码。

尝试删除影响 RANKX 内部度量的过滤器,因为来自 table 的上下文转换在 GENERATE

的第一个参数中提供
DEFINE
    TABLE HistFac =
        GENERATE (
            { 1, 2, 3 },
            ADDCOLUMNS (
                ADDCOLUMNS (
                    FacSchHist,
                    "@Rank",
                        RANKX (
                            FacSchHist,
                            CALCULATE ( [WtAvg], REMOVEFILTERS ( TableSupliedInTheFirstArgument ) )
                        )
                ),
                "Annual Group",
                    [@Rank]
                        - FLOOR ( ( [@Rank] - 1 ) / 3 * 3, 3 )
            )
        )
EVALUATE
NonHistFac
ORDER BY
    [Annual Group],
    [WtAvg] DESC

或者简单地使用变量在不同的过滤器上下文中进行计算。

DEFINE
    TABLE HistFac =
        VAR RankedTable =
            ADDCOLUMNS ( FacSchHist, "@Rank", RANKX ( FacSchHist, [WtAvg] ) )
        VAR SomeCalculationOnRankedTable =
            ADDCOLUMNS (
                RankedTable,
                "Annual Group",
                    [@Rank]
                        - FLOOR ( ( [@Rank] - 1 ) / 3 * 3, 3 )
            )
        RETURN
            GENERATE ( { 1, 2, 3 }, SomeCalculationOnRankedTable )
EVALUATE
NonHistFac
ORDER BY
    [Annual Group],
    [WtAvg] DESC

AntrikshSharma,您的评论和代码“或者简单地使用变量在不同的过滤器上下文中进行计算”是天才。代码按预期执行。我遇到的问题是两个表“NonHistFac”和“HistFac”的 UNION。我将提供一张图片来解释最新的代码。

15yr cycle of Hist & NonHist Facilities

图中为进球。将 NonHistFac(每 5 年调查一次)与 HistFac(每 3 年调查一次)结合起来。必须保持原来的排名(目前已满足。)

问题来了。图像中的数字是由 GENERATE 函数生成的值。当合并表格并且 NonHistFac 与 HistFac 混合时,它们在 1 到 5 个值中分布不均。

出现在Values 4和5中的显然是剩下的HistFac。我需要将整个组合从 1 分配到 5;或者如图所示,在 15 年的周期内。

谢谢。

// produce non-historic table with additional columns and replicate all rows 3x
TABLE NonHistFac =
        VAR NonHistRankedTable =
            ADDCOLUMNS ( FacSchNonHist, "@Rank", RANKX ( FacSchNonHist, [WtAvg] ) )
        VAR NonHistAnnualizedRankedTable =
            ADDCOLUMNS (
                NonHistRankedTable,
                "Annual Group",
                    [@Rank] - FLOOR ( ( [@Rank] - 1 ) / 5 * 5, 5 )
            )
        RETURN
            GENERATE ( { 1, 2, 3 }, NonHistAnnualizedRankedTable )
            // from the FLOOR & GENERATE functions, 5 x 3 = 15 (this is a 15 year cycle)

 //produce historic facility table with additional columns and replicate all rows 5x
TABLE HistFac =
        VAR HistRankedTable =
            ADDCOLUMNS ( FacSchHist, "@Rank", RANKX ( FacSchHist, [WtAvg] ) )
        VAR HistAnnualizedRankedTable =
            ADDCOLUMNS (
                HistRankedTable,
                "Annual Group",
                    [@Rank] - FLOOR ( ( [@Rank] - 1 ) / 3 * 3, 3 )
            )
        RETURN
            GENERATE ( { 1, 2, 3, 4, 5 }, HistAnnualizedRankedTable )
            // from the FLOOR & GENERATE functions, 3 x 5 = 15 (this is a 15 year cycle)

// combine the tables NonHistFac & HistFac to create one-table representing a 15 yr cycle
VAR FacSchUnion =
    UNION(
        NonHistFac,
        HistFac
    )
VAR FacSch15yr =
    DISTINCT(FacSchUnion)

EVALUATE
FacSch15yr

ORDER BY [Value],
[Annual Group],
[WtAvg] DESC