Ssas 用另一列替换列中某个百分比的值
我有个棘手的问题,也许你们中的一个能帮上忙 我有一个列,其中有几个不同的值,其中一个是“不可用”。我想创建一个计算列,将这些“不可用”值替换为4个新值,例如“值1”、“值2”等。。平均分配,即25%将为“价值1”,25%将为“价值2”,等等。我非常感谢能得到的任何帮助。我应该提到,我的数据存在于SSAS TDM中,因此我不能使用查询编辑器 谢谢 下面您将找到一些测试数据以及我想要的结果Ssas 用另一列替换列中某个百分比的值,ssas,powerbi,dax,powerquery,Ssas,Powerbi,Dax,Powerquery,我有个棘手的问题,也许你们中的一个能帮上忙 我有一个列,其中有几个不同的值,其中一个是“不可用”。我想创建一个计算列,将这些“不可用”值替换为4个新值,例如“值1”、“值2”等。。平均分配,即25%将为“价值1”,25%将为“价值2”,等等。我非常感谢能得到的任何帮助。我应该提到,我的数据存在于SSAS TDM中,因此我不能使用查询编辑器 谢谢 下面您将找到一些测试数据以及我想要的结果 Example = DATATABLE ( "Value", STRING, {
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" }
}
)
预期结果:
我更喜欢在查询编辑器中执行此操作,因为在那里创建索引列更容易 确保两个表都已加载到查询编辑器中,即替换表,
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"
还有您的示例表
Replace
(本例中为4)的行计数取模来转换索引列Replace
合并到索引上匹配的Example
上Value
列展开为Value.1
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"
在另一个答案中,我将假设您有一个索引替换表。我还假设您可以为
示例
表创建一个唯一的索引(这是一个单独的问题)
逻辑相同,但现在作为DAX计算列:
Value2 =
IF (
Example[Value] = "Not Available",
LOOKUPVALUE (
'Replace'[Value],
'Replace'[Index], MOD ( Example[Index], COUNTROWS ( 'Replace' ) )
),
Example[Value]
)
你能给出一个示例表和期望的结果吗?@AlexisOlson请查看我的编辑,谢谢。很抱歉,我应该指定我使用的是SSAS TDM,所以我认为我不能使用它。如果你有直接查询,我认为您根本无法添加列。我将在ssas中作为计算列进行这些更改,并引用新字段。谢谢!我要试一试!哇,多么优雅的解决方案啊。给你一个提示,伙计,这很有启发性。我真的很感谢你的帮助。