SQL 按 iReport/Fishbowl 中的位置过滤

SQL filtering by location in iReport/Fishbowl

我有一份报告,我正在尝试通过使用参数添加过滤器,允许用户 select Part Number 然后显示项目所在的位置,过滤依据, Location.

问题是无论出于何种原因,即使我将 LocationGroupID 设置为 LocationGroupID,它也无法工作或更新。

这里是一些截图。

我正在使用 iReport 和 Fishbowl


<parameter name="path" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["C:/Program     Files/Fishbowl/Server/reports/WorkOrder/"]]></defaultValueExpression>
</parameter>
<parameter name="module" class="java.lang.Object" isForPrompting="false">
    <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
</parameter>
<parameter name="REPORTDESCRIPTION" class="java.lang.String"     isForPrompting="false">
    <defaultValueExpression><![CDATA["Generates a summary of the quantity     and value of all parts currently on hand. This is a LIFO/FIFO based report."]]>    </defaultValueExpression>
    </parameter>
    <parameter name="partNum" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA[]]></defaultValueExpression>
    </parameter>
    <parameter name="locationGroupID" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[]]></defaultValueExpression>
    </parameter>
    <parameter name="AssetAccount" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["%"]]></defaultValueExpression>
    </parameter>
    <parameter name="dateRange1" class="java.util.Date" isForPrompting="false">
    <parameterDescription><![CDATA[This Month]]></parameterDescription>
    <defaultValueExpression><![CDATA[new Date()]]></defaultValueExpression>
    </parameter>
    <parameter name="dateRange2" class="java.util.Date" isForPrompting="false">
    <defaultValueExpression><![CDATA[new Date()]]></defaultValueExpression>
    </parameter>
    <parameter name="ckShowActiveCostingLayers" class="java.lang.String" isForPrompting="false">
    <parameterDescription><![CDATA[10,100]]></parameterDescription>
    <defaultValueExpression><![CDATA["10"]]></defaultValueExpression>
</parameter>
<parameter name="ckShowFulfilledCostingLayers" class="java.lang.String" isForPrompting="false">
    <parameterDescription><![CDATA[20,100]]></parameterDescription>
    <defaultValueExpression><![CDATA["100"]]></defaultValueExpression>
</parameter>
<parameter name="ckShowVoidedCostingLayers" class="java.lang.String" isForPrompting="false">
    <parameterDescription><![CDATA[30,100]]></parameterDescription>
    <defaultValueExpression><![CDATA["100"]]></defaultValueExpression>
</parameter>
<parameter name="ShowHistoricalData" class="java.lang.Boolean" isForPrompting="false">
    <defaultValueExpression><![CDATA[new Boolean(false)]]>        </defaultValueExpression>
    </parameter>
    <queryString>
</queryString>
<field name="QTY" class="java.lang.Double"/>
<field name="ORGQTY" class="java.lang.Double"/>
<field name="ORGTOTALCOST" class="java.lang.Double"/>
<field name="TOTALCOST" class="java.lang.Double"/>
<field name="DATECREATED" class="java.sql.Timestamp"/>
<field name="PARTNUMBER" class="java.lang.String"/>
<field name="PARTDESCRIPTION" class="java.lang.String"/>
<field name="InventoryAccount" class="java.lang.String"/>
<field name="LOCATIONGROUP_ID" class="java.lang.Integer"/>
<field name="COMPANY" class="java.lang.String"/>
<variable name="AssetValue" class="java.lang.Double">
    <variableExpression><![CDATA[$P{ShowHistoricalData}.booleanValue() == true ?
$F{ORGTOTALCOST} :
$F{TOTALCOST}]]></variableExpression>
</variable>
<variable name="TotalAsset" class="java.lang.Double" resetType="Group" resetGroup="Part" calculation="Sum">
    <variableExpression><![CDATA[$V{AssetValue}]]></variableExpression>
</variable>
<variable name="ReportTotal" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{AssetValue}]]></variableExpression>
</variable>
<variable name="locationTotal" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{AssetValue}]]></variableExpression>
</variable>
<variable name="TotalCost" class="java.lang.Double" resetType="Group" resetGroup="Part" calculation="Sum">
    <variableExpression><![CDATA[$V{UnitCost}]]></variableExpression>
</variable>
<variable name="GrandTotalAsset" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{AssetValue}]]></variableExpression>
</variable>
<variable name="GrandTotalCost" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{TotalCost}]]></variableExpression>
</variable>
<variable name="UnitCost" class="java.lang.Double">
    <variableExpression><![CDATA[$P{ShowHistoricalData}.booleanValue() == true ?
new Double($F{ORGTOTALCOST}.doubleValue() / $F{ORGQTY}.doubleValue()) :
new Double($F{TOTALCOST}.doubleValue() / $F{QTY}.doubleValue())]]>    </variableExpression>
</variable>
<variable name="DateFormat" class="java.lang.String" resetType="None">
    <variableExpression><!    [CDATA[(System.getProperty("REPORT_DATE_FORMAT"))]]></variableExpression>
</variable>

您遇到的问题是成本图层和位置之间没有直接 link。如果您只想按给定位置组中的零件进行过滤,则需要通过标签(现有库存 table)返回到该位置。

SELECT costlayer.qty AS Qty, costlayer.orgqty, costlayer.orgtotalcost,
    costlayer.totalcost AS TotalCost, costlayer.datecreated AS DateCreated,
    part.num AS PartNumber, part.description as PartDescription, asaccount.name as "InventoryAccount",
    company.name AS company, currency.symbol

FROM CostLayer
    LEFT JOIN Part ON part.id = costlayer.partid
    LEFT JOIN Tag ON part.id = tag.partId
    LEFT JOIN Location ON tag.locationId = location.id
    LEFT JOIN LocationGroup ON location.locationGroupId = locationGroup.id
    LEFT JOIN asaccount ON part.inventoryaccountid = asaccount.id
    JOIN company ON company.id = 1
    LEFT JOIN currency ON currency.homeCurrency = 1

WHERE costlayer.datecreated BETWEEN $P{dateRange1} AND $P{dateRange2}
  AND costlayer.statusid IN ($P!{ckShowActiveCostingLayers},$P!{ckShowFulfilledCostingLayers},$P!{ckShowVoidedCostingLayers})
  AND UPPER(part.num) LIKE UPPER($P{partNum})
  AND (UPPER(COALESCE(asaccount.name,'')) LIKE UPPER('%' || $P{AssetAccount} || '%'))
  AND LocationGroup.id LIKE $P{locationGroupID}

ORDER BY (CASE WHEN $P{AssetAccount} NOT LIKE CAST('%' AS varchar(256)) THEN asaccount.name ELSE part.num END), part.num ASC, costlayer.id, costlayer.datecreated

这将过滤并仅显示给定位置组中的零件。通过将参数默认值设置为“%”并取消选择用作提示选项,如果未选择,它将按所有筛选。请记住,如果您想查看位置组,如果您按全部过滤,则您的总数可能会与跨多个位置组的库存一起丢失。