如何在 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
我创建了一个 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