我有下表,将人员与活动相关联:
姓名 | 年龄 | 骑车人 | 独木舟运动员 | 徒步旅行者 | 跑步者 |
---|---|---|---|---|---|
比尔 | 45 | X | X | X | |
苏西 | 28 | X | |||
弗雷德 | 33 | X | X | ||
蒂斯 | 28 | X | X | ||
林 | 67 | X | X |
我希望有一个显示姓名和年龄的表格,用户可以在其中选择一项或多项活动。
例如,某人可以选择“徒步旅行者”,表格将显示 Bill、Thys 和 Lin。 如果他们选择“徒步旅行者”和“跑步者”,他们就会得到比尔和林。
我不知道该怎么做。 我愿意接受有关如何构建数据表以使这成为可能的建议。 我可以将各个活动列拖入作为视觉过滤器,但我想要一些对最终用户来说更容易的东西。
将数据加载到PBI时,我将X更改为1,将空值更改为0。 然后根据 Cyclist、Canoeist、Hiker 和 Runner 列,我对 PQ 中的数据进行了逆透视:
然后仅保留 Participates = 1 的行:
完整的PQ代码:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcsrMyVHSUTIxBRKGQGwApQ2VYnWilYJLizNTgTwjCyQpAzAGSbsVpaYAOcbGcE3IsiEZlcXoeg3hsj6ZeUC2mTlcC9zeWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Age = _t, Cyclist = _t, Canoeist = _t, Hiker = _t, Runner = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Age", Int64.Type}, {"Cyclist", Int64.Type}, {"Canoeist", Int64.Type}, {"Hiker", Int64.Type}, {"Runner", Int64.Type}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Name", "Age"}, "Attribute", "Value"),
#"Renamed Columns" = Table.RenameColumns(#"Unpivoted Columns",{{"Attribute", "Activity"}, {"Value", "Particpates"}}),
#"Filtered Rows" = Table.SelectRows(#"Renamed Columns", each ([Particpates] = 1))
in
#"Filtered Rows"
然后在切片器中使用 Activity :