0

我有 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 的值?

4

1 回答 1

1

你不能有一个表达式直接过滤并给出列名作为结果......你可以做的是反透视你的表,这样你就有一个像下面这样的结构:

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 },
                    { Name: Name, Attribute: "Process2", Value: Process2 },
                    { Name: Name, Attribute: "Process3", Value: Process3 },
                    ...
                    { Name: Name, Attribute: "Process58", Value: Process58 },
                    { Name: Name, Attribute: "Process59", Value: Process59 }))

如果您在应用程序的 OnStart 属性中有此表达式(或在更新数据源后可以刷新未透视集合的其他位置),您可以开始使用它。现在,如果您有一个 Dropdown 控件,其 Items 属性具有以下表达式:

MyDataSource.Name

然后,您可以为其 Items 属性创建一个具有以下表达式的库:

Filter(
    UnpivotedCollection,
    Name = Dropdown1.Selected.Name
    Value > 0)

您将在图库中获得具有正值的给定名称的记录。

于 2020-08-15T19:52:53.380 回答