过滤图库以显示类别和所有子类别的所有项目

时间:2018-02-13 01:00:26

标签: google-sheets powerapps

我正在尝试使用PowerApps创建一个库存应用,目前每个项目属于主要类别,并且至少有一个子类别。一个小例子是这样的:

Concessions
|    Food
|        Chips
|            Brand 1
|            Brand 2
|            Brand 3
|        Candy
|           Chocolate
|               Brand 1
|               Brand 2
|           Hard
|           Gum
|        Grill
|    Drinks
Travel Goods
|    TravelGoodsSubCat

这是在google工作表(以及同一本书中另一张工作表中的库存数据)中保存的,如下所示:

CatID    CatName            ParentCat
1        Concessions        0
2        Travel Goods       0
3        Food               1
4        Chips              3
5        Candy              3
6        TravelGoodsSubCat  2
.... And So on....

所以我想象的是两个画廊,一个横跨屏幕顶部的画廊,只显示属于类别0的孩子的类别。第二个画廊显示当前类别下的每个项目。因此,如果用户在水平库中选择“让步”,则垂直图库应填充分配给类别1,3,4,5等的所有项目。

在我看来,如何实现递归搜索以寻找所有这些可能的子类别?

1 个答案:

答案 0 :(得分:1)

这是可以实现的,但为了使性能不会显着降低,您需要首先在集合中缓存类别表。如果您使用Google表格作为数据源,情况尤其如此。

然后你可以创建一个包含两列的集合:CatID和UltimateParentCat,如下所示:

CatID  UltimateParentCat
1      1
2      2
3      1
4      1
5      1
6      2

这是您将使用递归的地方,但是对每一步进行编码,因此您需要停留在您期望的最大深度。

因此,您需要将应用程序的OnStart属性或某个按钮的OnSelect属性设置为类似的内容,以便只填充一次。

ClearCollect(CachedCategories, GoogleSheetsTable);

ClearCollect(Step_1,
    AddColumns(
        ShowColumns(
            Filter(CachedCategories, ParentCat=0),
            "CatID"
            ),
        "UltimateParentCat", CatID
        )
    );

Clear(Step_2);

ForAll(Step_1,
    Collect(Step_2,
        AddColumns(
            ShowColumns(
                Filter(CachedCategories, ParentCat=Step_1[@CatID]),
                "CatID"
                ),
        "UltimateParentCat", Step_1[@UltimateParentCat])
        ));

Clear(Step_3);

ForAll(Step_2,
    Collect(Step_3,
        AddColumns(
            ShowColumns(
                Filter(CachedCategories, ParentCat=Step_2[@CatID]),
                "CatID"
                ),
        "UltimateParentCat", Step_2[@UltimateParentCat])
        ));

ClearCollect(CatsWithUltimate, Step_1, Step_2, Step_3)

完成后,水平图库的Items属性应为

Filter(CachedCategories, ParentCat=0)

然后,垂直图库的Items属性应为

Filter(Products,
    ProductCategory in Filter(CatsWithUltimate,
        UltimateParentCat=GalleryHorizontal.Selected.CatID).CatID)

请告诉我上面的任何拼写错误,以便我可以解决。

作为旁注,我建议迁移到另一个数据源,如Azure SQL数据库,只是生成CatsWithUltimate作为视图。