筛选最近按照小组搜索的记录

问题描述:

我在我的“客户”桌上有一个门户。相关表格包含随时间更新的调查结果。对于客户端和类别(相关表中的字段)的每个组合,我只希望门户显示最近收集的行。筛选最近按照小组搜索的记录

Here is a link to a trivial example that illustrates the issue I'm trying to address。我在这个例子中(相关的客户端ID)两个表:

  • 客户
  • 表1获取方法提要

表1获取方法概述表看起来像这样: enter image description here

其中:

  • MAXDATE是汇总字段= M最大日期
  • MaxDateGroup是一个计算的字段= GetSummary(MaxDate; ClientIDCategory)
  • ShowInPortal =如果(日期= MaxDateGroup; 1; 0)
  • 该表上ClientIDCategory

问题1,我很为难上排序:
上表中的ShowInPortal应该等于第3行(PKTable01 = 5),第4行(PKTable01 = 6)和第6行(PKTable01 = 4)中的1。我不确定FM为什么将1Red和1Blue解释为同一类别,或者我只是误解了GetSummary函数的功能。

clients表如下所示: enter image description here

其中:

  • 门户记录上ClientIDCategory

问题2排序时我难倒:
我只希望ShowInPortal值等于1的行应出现在门户中。我尝试使用以下公式创建一个门户网站过滤器:表1获取摘要方法:: ShowInPortal = 1.但是,使用该过滤器会从门户网站中删除所有行。

任何帮助,非常感谢。

+0

您是否曾尝试将MaxDateGroup放入门户以查看每行的计算结果? – AndreasT

+0

嗨@AndreasT,我能够解决问题1.用于MaxDateGroup的计算是返回一个数字而不是文本。这导致它忽略了“红色”和“蓝色”。尽管如此,仍然不知道问题2。我在门户中添加了MaxDateGroup,但我没有看到它会如何帮助解决问题2. –

+0

好吧,在我看来,问题在于门户过滤器在排序之前运行,这意味着不会有任何记录ShowInPortal字段的计算结果为true,因为需要对门户进行排序以使求取总结起作用。所以ShowInPortal在这种情况下总是是错误的。 – AndreasT

一个解决方案是使用ExecuteSQL来获取最大日期。这消除了对摘要功能和排序的需求,并按预期工作。建议将其作为数字返回以避免与日期格式有关的任何问题。

GetAsTimestamp ( 
    ExecuteSQL (
    "SELECT DISTINCT COALESCE(MaxDate,'') 
     FROM Survey 
    WHERE ClientIDCategory = ? " 
    ; "" ; "";ClientIDCategory) 
) 

此外,您还需要将ShowInPortal字段更改为一个未保存计算字段:

If (GetAsNumber(Date) = MaxDateGroupSQL ; 1 ; 0) 

然后在这一领域过滤门户。

如果需要,我可以向您发送示例文件。

+0

Hi @AndreasT。感谢您的建议。不幸的是,它似乎并没有为我工作。我将上面的代码块剪切并粘贴到MaxDate的计算中。当我将新记录添加到调查表时,MaxDate为空。 –

+0

上传了示例文件[here](https://www.dropbox.com/s/hgd9ke51q3o5tco/Portal%20Show%20last%20By%20Group%20for%20Stack%20Overflow.fmp12.zip?dl=0) – AndreasT

+0

Works!谢谢! –