将一列中的百分比值替换为另一列
Replace a percentage of values in a column with another
我有一个棘手的问题,也许你们中的一位可以提供帮助。
我有一列包含几个不同的值,其中之一是 "Not Available"。我想通过用 4 个新值替换那些 "Not Available" 值来创建一个计算列,比如 "Value 1"、"Value 2" 等。平均分布,即 25% 将是 "Value 1" , 25% 将是 "Value 2" 等。我非常感谢我能得到的任何帮助。我应该提到我的数据存在于 SSAS TDM 中,所以我不能使用查询编辑器。
谢谢!
下面是一些测试数据以及我想要的结果。
Example =
DATATABLE (
"Value", STRING,
{
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Bike" },
{ "Bike" },
{ "Bike" },
{ "Bike" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Penny Board" },
{ "Penny Board" },
{ "Penny Board" },
{ "BMX" },
{ "BMX" },
{ "BMX" }
}
)
期望的结果:
我更愿意在查询编辑器中执行此操作,因为在那里创建索引列更容易。
确保您的 table 都已加载到查询编辑器中,替换 table、Replace
。
let
Source = Table.FromRows({{"Value1"},{"Value2"},{"Value3"},{"Value4"}},{"Value"}),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1)
in
#"Added Index"
还有你的例子table。
- 为您的示例添加索引 table。
- 通过对
Replace
(本例中为 4)的行数取模来转换索引列。
- 合并
Replace
到索引上的 Example
匹配。
- 将
Value
列扩展为 Value.1
。
- 添加自定义列以选择要使用的列。
- 清理。删除您不想保留的所有列。
这是查询的 M 代码:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8ssvUXAsS8zMSUzKSVWK1RkuIk6Z2QQZwdmJJalJ+YlFKVTn5uWXU5sXkJqXV6ngRDTfyTcCk44FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Value = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Calculated Modulo" = Table.TransformColumns(#"Added Index", {{"Index", each Number.Mod(_, Table.RowCount(Replace)), type number}}),
#"Merged Queries" = Table.NestedJoin(#"Calculated Modulo",{"Index"},Replace,{"Index"},"Replace",JoinKind.LeftOuter),
#"Expanded Replace" = Table.ExpandTableColumn(#"Merged Queries", "Replace", {"Value"}, {"Value.1"}),
#"Added Custom" = Table.AddColumn(#"Expanded Replace", "Value2", each if [Value] = "Not Available" then [Value.1] else [Value], type text),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index", "Value.1"})
in
#"Removed Columns"
与其他答案一样,我假设您有一个索引替换 table。我还将假设您可以为您的 Example
table 创建一个唯一索引(这是一个单独的问题)。
逻辑相同,但现在作为 DAX 计算列:
Value2 =
IF (
Example[Value] = "Not Available",
LOOKUPVALUE (
'Replace'[Value],
'Replace'[Index], MOD ( Example[Index], COUNTROWS ( 'Replace' ) )
),
Example[Value]
)
我有一个棘手的问题,也许你们中的一位可以提供帮助。
我有一列包含几个不同的值,其中之一是 "Not Available"。我想通过用 4 个新值替换那些 "Not Available" 值来创建一个计算列,比如 "Value 1"、"Value 2" 等。平均分布,即 25% 将是 "Value 1" , 25% 将是 "Value 2" 等。我非常感谢我能得到的任何帮助。我应该提到我的数据存在于 SSAS TDM 中,所以我不能使用查询编辑器。
谢谢!
下面是一些测试数据以及我想要的结果。
Example =
DATATABLE (
"Value", STRING,
{
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Not Available" },
{ "Bike" },
{ "Bike" },
{ "Bike" },
{ "Bike" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Skateboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Snowboard" },
{ "Penny Board" },
{ "Penny Board" },
{ "Penny Board" },
{ "BMX" },
{ "BMX" },
{ "BMX" }
}
)
期望的结果:
我更愿意在查询编辑器中执行此操作,因为在那里创建索引列更容易。
确保您的 table 都已加载到查询编辑器中,替换 table、Replace
。
let
Source = Table.FromRows({{"Value1"},{"Value2"},{"Value3"},{"Value4"}},{"Value"}),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1)
in
#"Added Index"
还有你的例子table。
- 为您的示例添加索引 table。
- 通过对
Replace
(本例中为 4)的行数取模来转换索引列。 - 合并
Replace
到索引上的Example
匹配。 - 将
Value
列扩展为Value.1
。 - 添加自定义列以选择要使用的列。
- 清理。删除您不想保留的所有列。
这是查询的 M 代码:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8ssvUXAsS8zMSUzKSVWK1RkuIk6Z2QQZwdmJJalJ+YlFKVTn5uWXU5sXkJqXV6ngRDTfyTcCk44FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Value = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Calculated Modulo" = Table.TransformColumns(#"Added Index", {{"Index", each Number.Mod(_, Table.RowCount(Replace)), type number}}),
#"Merged Queries" = Table.NestedJoin(#"Calculated Modulo",{"Index"},Replace,{"Index"},"Replace",JoinKind.LeftOuter),
#"Expanded Replace" = Table.ExpandTableColumn(#"Merged Queries", "Replace", {"Value"}, {"Value.1"}),
#"Added Custom" = Table.AddColumn(#"Expanded Replace", "Value2", each if [Value] = "Not Available" then [Value.1] else [Value], type text),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index", "Value.1"})
in
#"Removed Columns"
与其他答案一样,我假设您有一个索引替换 table。我还将假设您可以为您的 Example
table 创建一个唯一索引(这是一个单独的问题)。
逻辑相同,但现在作为 DAX 计算列:
Value2 =
IF (
Example[Value] = "Not Available",
LOOKUPVALUE (
'Replace'[Value],
'Replace'[Index], MOD ( Example[Index], COUNTROWS ( 'Replace' ) )
),
Example[Value]
)