【问题标题】:Powerapps - Split Collection into smaller Collections based on SQL lookup dataPowerapps - 根据 SQL 查找数据将集合拆分为更小的集合
【发布时间】:2022-06-12 06:12:08
【问题描述】:

-=-=-=-=-

为清晰起见进行了编辑(我希望!):

Master_Transactions_Log 数据库有超过 50 万个条目,但我的扫描计数通常不到 100 个。

我的四个测试条目(保存到 ScanDataCollection_SmartComm_MasterList)是:

REQ2069120.RITM2374312.01 
REQ2075966.RITM2382958.01 
REQ2081369.RITM2389938.01 
REQ2091095.RITM2402123.01

我已手动将一条记录添加到 SQL 数据库中(出于测试目的,我知道此时只有一个条目符合此条件),因此有一个 单条记录其中 Scan_Code = "REQ2081369.RITM2389938.01" and Transaction_Type = "New Equipment Delivery - Comms Lockoff"(现在只是想保持简单)

结果应该是两个集合:

SC_OnCommsHold 包含一个名为“Result_OnHold”的列,其中仅包含一个条目:

REQ2081369.RITM2389938.01

SC_Remainder_1 有一个名为“Result”的列,其中包含 ScanDataCollection_SmartComm_MasterList 中的所有条目减去现在 SC_OnCommsHold 中的条目

REQ2069120.RITM2374312.01 
REQ2075966.RITM2382958.01 
REQ2091095.RITM2402123.01

我现在的代码是:

ClearCollect(SC_OnCommsHold, RenameColumns(ScanDataCollection_SmartComm_MasterList,"Result","Result_OnHold"));
ClearCollect(SC_Remainder_1, ScanDataCollection_SmartComm_MasterList);
//RemoveIf(SC_OnCommsHold, "REQ2081369.RITM2389938.01" in Result_OnHold);
RemoveIf(SC_OnCommsHold, IsEmpty(Filter(Master_Transaction_Log, Scan_Code = Result_OnHold, Transaction_Type="New Equipment Delivery - Comms Lockoff")));

运行需要几秒钟,所以我怀疑它实际上是在查看数据库,但结果是 SC_OnCommsHold 以所有四个测试代码结束,这对于其余的一切。上面我注释掉的小行(#3)是我的帮手,以确保我在数据结构上的想法是正确的,但上面的实际实现(第 4 行)失败了。

我一直认为这条线是踢我的线,但我不知道我需要什么。

在我能够正确填充 SC_OnCommsHold 之后,我希望能够使用相同的技巧deSC_Remainder_1 填充这些元素>.

-=-=-=-=-

真的为此苦苦挣扎......

我从一个集合开始:ScanDataCollection_SmartComm_MasterList

看起来像这样:

Result
REQ1991799.RITM2280596.01 
REQ2048874.RITM2349401.01 
REQ2037354.RITM2335400.01 

我有一个数据库表: Master_Transaction_Log

...其中包含三个特别感兴趣的列:

Timestamp
Scan_Code
Transaction_Type

我想以 两个 集合结束:

SC_ReturnToDepot
Result
REQ1991799.RITM2280596.01 

SC_Remainder_1
Result
REQ2048874.RITM2349401.01 
REQ2037354.RITM2335400.01 

标准如下:对于 ScanDataCollection_SmartComm_MasterList 中的任何给定结果,如果:

数据库记录具有 Scan_Code = Result AND Transaction_Type = "New Equipment Delivery - Cust. Msg: Equipment Returning to Depot" AND Timestamp > 72 小时前,那么Result 的值被添加到 SC_ReturnToDepot

SC_Remainder_1所有剩余值,不符合上述标准。

到目前为止,我已经做到了这一点,但在此之后它正在杀死我:

            ClearCollect(SC_ReturnToDepot,
              ForAll(ScanDataCollection_SmartComm_MasterList,
                ...?
              );
            );

            ClearCollect(SC_Remainder_1,
              ForAll(ScanDataCollection_SmartComm_MasterList,
                ...?
              );
            );

我有一种感觉,如果我能写出一行代码,我就要参加比赛了,但这只是......呃,我的大脑是个混蛋。

-=-=-=-=-=- 澄清

  • 这是一个多步骤级联过程的一部分,该过程始于 ScanDataCollection_SmartComm_MasterList
  • 我无法更改 SQL 表上的数据,也无法切换 我所有的逻辑结构都在存储过程中完成, 等
  • 如果 PowerApps 中有发送特定 SQL 查询的方法, 并且该特定 SQL 查询将在 收藏,然后我对此持开放态度,但结果必须是 如上所述的集合,因为我使用这些结果集合来 馈送其他进程。

【问题讨论】:

    标签: sql-server powerapps powerapps-collection


    【解决方案1】:

    您可以通过多种方式处理这种情况。您可以使用两个过滤器表达式创建每个集合,其中第二个的条件是第一个的否定,类似于

    ClearCollect(
      SC_ReturnToDepot,
      Filter(
        Master_Transaction_Log,
        Scan_Code in ScanDataCollection_SmartComm_MasterList,
          And Transaction_Type = "New Equipment Delivery - Cust. Msg: Equipment Returning to Depot"
          And Timestamp > DateAdd(Now(), -3, TimeUnit.Days)));
    ClearCollect(
      SC_Remainder_1,
      Filter(
        Master_Transaction_Log,
        Not(
          Scan_Code in ScanDataCollection_SmartComm_MasterList,
            And Transaction_Type = "New Equipment Delivery - Cust. Msg: Equipment Returning to Depot"
            And Timestamp > DateAdd(Now(), -3, TimeUnit.Days))));
    

    另一种选择是使用 ForAll 表达式,对于每条记录,使用 If 表达式插入两个集合之一,类似于以下公式:

    Clear(SC_ReturnToDepot);
    Clear(SC_Remainder_1);
    ForAll(
      Master_Transaction_Log,
      If(
        Scan_Code in Master_Transaction_Log
          And Transaction_Type = "New Equipment Delivery - Cust. Msg: Equipment Returning to Depot"
          And Timestamp > DateAdd(Now(), -3, TimeUnit.Days),
        Collect(SC_ReturnToDepot, ThisRecord),
        Collect(SC_Remainder_1, ThisRecord)))
    

    【讨论】:

    • 谢谢 - 现在探索这些。我要小心,因为 Master_Transaction_Log 到目前为止有超过 50 万个条目,如果我能快速完成,那就没问题了。 :)
    • 嗯,我可能不小心包含了歧义。我想确保我的搜索是“对于我的集合中的每个项目,在数据库中查找它”而不是“对于数据库中的每个项目,在我的集合中查找它”。区别很重要,因为数据库有超过 50 万个条目。我会相应地编辑...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多