问题描述
我有一个包含60列的表格,例如该表格如下所示
Name Process1 Process2 .............. Process59
A 1 2 0
B 4 0 0
C 2 3 1
在powerapp中-我已经从用户那里得到了名字。在我们的例子中,如果用户选择“ A”,那么我希望我的画廊仅显示A的值大于0的过程列。
在这种情况下,如果选择“ A”,则图库将仅显示进程1,进程2及其值。
如果用户选择“ B”,则仅将显示进程1。
我要如何实现它-我知道我必须使用过滤器-但是如何遍历表中的所有列以找到所选用户的大于0的值?
解决方法
您不能有一个直接过滤并给出列名称作为结果的表达式...您可以做的是 unpivot 您的表,这样您将拥有一个类似于下面的结构:>
Name Process Value
A Process1 1
A Process2 2
...
A Process59 0
B Process1 4
B Process2 0
...
B Process59 0
C Process1 2
C Process2 3
...
C Process59 1
一旦您使用了该格式的数据,就可以根据列值应用过滤器。
要创建未透视表,可以使用如下表达式(假设您的数据源称为“ MyDataSource”):
Clear(UnpivotedCollection);
ForAll(
MyDataSource,Collect(
UnpivotedCollection,{ Name: Name,Attribute: "Process1",Value: Process1 },Attribute: "Process2",Value: Process2 },Attribute: "Process3",Value: Process3 },...
{ Name: Name,Attribute: "Process58",Value: Process58 },Attribute: "Process59",Value: Process59 }))
如果您在App的OnStart属性中拥有此表达式(或在更新数据源后可以刷新未透视集合的其他位置),则可以开始使用它。现在,如果您有一个Dropdown控件,其中Items属性具有以下表达式:
MyDataSource.Name
然后,您可以为其图库的Items属性添加以下表达式:
Filter(
UnpivotedCollection,Name = Dropdown1.Selected.Name
Value > 0)
您将在画廊中找到具有正值的给定名称的记录。