grouping 相关问题

将实体分组为关联元素集合的过程。

将 R 中的多段线分组

我正在尝试找到对类似于下图的折线进行分组的最佳方法。我的问题是,我不知道如何将较低的行分组在一起,而较低的行不与...

回答 1 投票 0

如何通过位置验证值以避免在 xslt 中打印标题?

是 xslt 的新手,我正在使用 xslt 1.0 从 xml 代码创建 PDF。 我的源数据如下。 是 xslt 新手,我正在使用 xslt 1.0 从 xml 代码创建 PDF。 我的源数据如下。 <STATEMENT> <STATEMENT_AGING> <AGING> <AGING_LABEL>Current</AGING_LABEL> <AGING_AMOUNT>$28,927.43</AGING_AMOUNT> </AGING> <AGING> <AGING_LABEL>1 - 30</AGING_LABEL> <AGING_AMOUNT>$0.00</AGING_AMOUNT> </AGING> <AGING> <AGING_LABEL>31 - 60</AGING_LABEL> <AGING_AMOUNT>$0.00</AGING_AMOUNT> </AGING> <AGING> <AGING_LABEL>61 - 90</AGING_LABEL> <AGING_AMOUNT>$0.00</AGING_AMOUNT> </AGING> <AGING> <AGING_LABEL>91 - 120</AGING_LABEL> <AGING_AMOUNT>$0.00</AGING_AMOUNT> </AGING> <AGING> <AGING_LABEL>Over 120</AGING_LABEL> <AGING_AMOUNT>$0.00</AGING_AMOUNT> </AGING> </STATEMENT_AGING> <GROUP ID='1' label=''> <GROUP_LABEL /> <GROUP_NAME>SoleraStatementSection</GROUP_NAME> <GROUP_TYPE>LABEL</GROUP_TYPE> <GROUP_HIDE_FLAG>0</GROUP_HIDE_FLAG> <GROUP_HEADER_ROW> <COL headerAlign='start' headerFormat='text' width='2cm'>Doc. #</COL> <COL headerAlign='start' headerFormat='text' width='1cm'>Doc. Type</COL> <COL headerAlign='start' headerFormat='text' width='1cm'>Doc. Date</COL> <COL headerAlign='start' headerFormat='text' width='1cm'>Due Date</COL> <COL headerAlign='center' headerFormat='text' width='1cm'>Currency</COL> <COL headerAlign='end' headerFormat='currency' width='1cm'>Original Amount</COL> <COL headerAlign='end' headerFormat='currency' width='1cm'>Balance</COL> <COL headerAlign='start' headerFormat='number' width='1cm'>ChildAccount</COL> </GROUP_HEADER_ROW> <GROUP_DATA_ROW> <COL>2120-000023134</COL> <COL>Invoice</COL> <COL>2024-05-13T00:23:14.205918-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$13,247.46</COL> <COL>$13,247.46</COL> <COL>Price Acura</COL> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>2120-000023135</COL> <COL>Invoice</COL> <COL>2024-05-13T00:36:37.008144-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$13,247.37</COL> <COL>$13,247.37</COL> <COL>Price Acura</COL> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>2120-000023136</COL> <COL>Invoice</COL> <COL>2024-05-13T00:51:32.838201-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$2,432.60</COL> <COL>$2,432.60</COL> <COL>Price Honda</COL> </GROUP_DATA_ROW> </GROUP> <GROUP ID='2' label=''> <GROUP_LABEL /> <GROUP_NAME>CreditData</GROUP_NAME> <GROUP_TYPE>LABEL</GROUP_TYPE> <GROUP_HIDE_FLAG>0</GROUP_HIDE_FLAG> <GROUP_HEADER_ROW> <COL headerAlign='start' headerFormat='text' width='0cm'>Credit #</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>Credit Type</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>Credit Date</COL> <COL headerAlign='center' headerFormat='text' width='0cm'>Currency</COL> <COL headerAlign='end' headerFormat='currency' width='0cm'>Credit Amount</COL> <COL headerAlign='end' headerFormat='currency' width='0cm'>Unallocated Amnt</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>ChildAccount</COL> </GROUP_HEADER_ROW> </GROUP> <GROUP ID='3' label=''> <GROUP_LABEL /> <GROUP_NAME>PaymentSection</GROUP_NAME> <GROUP_TYPE>LABEL</GROUP_TYPE> <GROUP_HIDE_FLAG>0</GROUP_HIDE_FLAG> <GROUP_HEADER_ROW> <COL headerAlign='start' headerFormat='text' width='0cm'>Payment #</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>Payment Type</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>Payment Date</COL> <COL headerAlign='center' headerFormat='text' width='0cm'>Currency</COL> <COL headerAlign='end' headerFormat='currency' width='0cm'>Payment Amount</COL> <COL headerAlign='end' headerFormat='currency' width='0cm'>Unallocated Amnt</COL> <COL headerAlign='start' headerFormat='text' width='0cm'>ChildAccount</COL> </GROUP_HEADER_ROW> </GROUP> </STATEMENT> 问题是,在 GROUPID 1 中,我尝试按 custName 或 col[8] 对数据进行分组,但我想在每次 custName 更改时打印标题。我尝试将值存储到变量中,但一旦循环再次出现,该值就会丢失,因此我尝试使用 IF 进行评估时不起作用。 有谁知道我该如何管理这个问题,因为我看到了很多使用 diff 方法的答案,但我不太理解所有这些答案,因为我的源 xml 有“通用”标签而不是真实的标签名称。 PS。我尝试了选择和 if 条件,但它们都不起作用。 <xsl:template name= "DetailSectionG1"> <fo:block space-before="8mm" font-weight="bold" color="{$blue-color}" keep-together.within-page="always" keep-with-next="always"> <fo:table width="100%" border-collapse="collapse" table-layout="fixed"> <fo:table-column column-width="{$left-margin}"/> <fo:table-column column-width="proportional-column-width(1)"/> <fo:table-column column-width="{$right-margin}"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block/> </fo:table-cell> <fo:table-cell> <fo:block font-size="{$large-font-size}" padding-top="3 * {$padding}" padding-bottom="{$padding}"> Statement Details </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> <xsl:choose> <xsl:when test="GROUP[@ID=1]/GROUP_DATA_ROW/COL[1] !=''"> <fo:block> <fo:table width="100%" border-collapse="collapse" table-layout="fixed"> <fo:table-column column-width="{$data-left-margin}"/> <fo:table-column column-width="30mm"/> <fo:table-column column-width="25mm"/> <fo:table-column column-width="25mm"/> <fo:table-column column-width="25mm"/> <fo:table-column column-width="22mm"/> <fo:table-column column-width="27mm"/> <fo:table-column column-width="25mm"/> <fo:table-column column-width="{$data-right-margin}"/> <xsl:for-each select="/STATEMENT/GROUP[@ID=1]/GROUP_DATA_ROW[generate-id(.)=generate-id(key('groupDataRow', concat(COL[position() = 8],'+',COL[position() = 1])))]"> <xsl:variable name="vGroup" select="key('kAllFields', concat(COL[position() = 8],'+',COL[position() = 1]))"/> <fo:table-body> <xsl:choose> <xsl:when test="custName != COL[position() = 8] or position() = 1"> <fo:table-row> <fo:table-cell> <fo:block/> </fo:table-cell> <fo:table-cell> <fo:block font-weight="bold" color="{$blue-color}" keep-together.within-page="always" keep-with-next="always" padding-bottom="{$padding}"/> <!--xsl:value-of select="COL[position() = 8]"/--> <!--/fo:block--> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell> <fo:block/> </fo:table-cell> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">1</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">2</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">3</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">4</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">5</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">6</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> <xsl:call-template name="HeaderCell"> <xsl:with-param name="position">7</xsl:with-param> <xsl:with-param name="color" select="$blue-color"/> </xsl:call-template> </fo:table-row> </xsl:when> <xsl:otherwise/> </xsl:choose> <!--xsl:if test="{$acctName} != COL[position() = 8] or position() = 1"> </xsl:if--> <fo:table-row> <fo:table-cell> <fo:block/> </fo:table-cell> <xsl:call-template name="Cell"> <xsl:with-param name="position">1</xsl:with-param> </xsl:call-template> <xsl:call-template name="Cell"> <xsl:with-param name="position">2</xsl:with-param> </xsl:call-template> <fo:table-cell> <fo:block color="{$base-color}" padding-bottom="{$small-padding}"> <xsl:attribute name="end-indent">1mm</xsl:attribute> <xsl:attribute name="text-align"> <xsl:value-of select="../GROUP_HEADER_ROW[1]/COL[position() = 3]/@headerAlign"/> </xsl:attribute> <xsl:call-template name="getDate"> <xsl:with-param name="value" select="COL[position()=3]"/> </xsl:call-template> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block color="{$base-color}" padding-bottom="{$small-padding}"> <xsl:attribute name="end-indent">1mm</xsl:attribute> <xsl:attribute name="text-align"> <xsl:value-of select="../GROUP_HEADER_ROW[1]/COL[position() = 4]/@headerAlign"/> </xsl:attribute> <xsl:call-template name="getDate"> <xsl:with-param name="value" select="COL[position()=4]"/> </xsl:call-template> </fo:block> </fo:table-cell> <xsl:call-template name="Cell"> <xsl:with-param name="position">5</xsl:with-param> </xsl:call-template> <xsl:call-template name="Cell"> <xsl:with-param name="position">6</xsl:with-param> </xsl:call-template> <xsl:call-template name="Cell"> <xsl:with-param name="position">7</xsl:with-param> </xsl:call-template> </fo:table-row> <xsl:variable name="custName"> <xsl:value-of select="COL[position() = 8]"/> </xsl:variable> </fo:table-body> </xsl:for-each> </fo:table> </fo:block> </xsl:when> <xsl:otherwise> <fo:block keep-together.within-page="always" keep-with-next="always"> <fo:table width="100%" border-collapse="collapse" table-layout="fixed"> <fo:table-column column-width="{$left-margin}"/> <fo:table-column column-width="proportional-column-width(1)"/> <fo:table-column column-width="{$right-margin}"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block/> </fo:table-cell> <fo:table-cell> <fo:block color="{$base-color}" padding-bottom="{$small-padding}" end-indent="1mm"> No invoices to display </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> </xsl:otherwise> </xsl:choose> </xsl:template> 我期望的 PDF 就是这个。 [期望输出] (https://i.sstatic.net/GPAPwxHQ.png) 目前我尝试的验证不起作用,并且 acctName 和标头表仅显示一次。 电流输出 您似乎在分组方面遇到了困难,请注意,在 XSLT 2 或更高版本中,分组要容易得多,您可以这样做 <xsl:template match="GROUP[@ID = 1]"> <xsl:for-each-group select="GROUP_DATA_ROW" group-by="COL[8]"> <group key="{current-grouping-key()}"> <xsl:sequence select="current-group()"/> </group> </xsl:for-each-group> </xsl:template> 并获得例如 <group key="Price Acura"> <GROUP_DATA_ROW> <COL>2120-000023134</COL> <COL>Invoice</COL> <COL>2024-05-13T00:23:14.205918-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$13,247.46</COL> <COL>$13,247.46</COL> <COL>Price Acura</COL> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>2120-000023135</COL> <COL>Invoice</COL> <COL>2024-05-13T00:36:37.008144-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$13,247.37</COL> <COL>$13,247.37</COL> <COL>Price Acura</COL> </GROUP_DATA_ROW> </group> <group key="Price Honda"> <GROUP_DATA_ROW> <COL>2120-000023136</COL> <COL>Invoice</COL> <COL>2024-05-13T00:51:32.838201-05:00</COL> <COL>2024-06-12T05:00:00.000000+00:00</COL> <COL>USD</COL> <COL>$2,432.60</COL> <COL>$2,432.60</COL> <COL>Price Honda</COL> </GROUP_DATA_ROW> </group> 因此您可以轻松地拥有两个组和每个组的正确数据,我没有尝试输出想要的 XSL-FO,但是一旦您解决了分组问题就应该很容易。 请注意,XSLT 3(XSLT 的当前版本)在多种平台、浏览器 (https://www.saxonica.com/download/javascript.xml) 和 Node.js () 中受支持https://www.npmjs.com/package/saxon-js)您可以使用 SaxonJS 2(2.6 是当前版本),对于 Java,您可以在 Maven 上找到 Saxon HE https://mvnrepository.com/artifact/ net.sf.saxon/Saxon-HE 或在 Github 上,对于 Python,有 SaxonCHE (https://pypi.org/project/saxonche/),对于 .NET,有 Saxon .NET HE (https:/ /www.nuget.org/packages/Saxon-HE,https://www.nuget.org/packages/SaxonHE12s9apiExtensions)。 尽管如此,如果您在受限环境中工作而被迫使用 XSLT 1,请使用密钥 <xsl:key name="group" match="GROUP[@ID = 1]/GROUP_DATA_ROW" use="COL[8]"/> <xsl:template match="GROUP[@ID = 1]"> <xsl:for-each select="GROUP_DATA_ROW[generate-id() = generate-id(key('group', COL[8])[1])]"> <group key="{COL[8]}"> <xsl:copy-of select="key('group', COL[8])"/> </group> </xsl:for-each> </xsl:template>

回答 1 投票 0

Polars:滚动组,其起始索引由不同列设置

我正在使用 Polars (Python) 处理数据集,并且对“滚动”分组操作感到困惑。数据如下: 更新时间 最后交易ts 询问价格 询问数量 竞价 出价数量 2023年12月20日...

回答 1 投票 0

通过某些属性对数组元素进行分组

我有一个带有属性日期的对象数组。 我想要的是创建数组数组,其中每个数组将包含具有相同日期的对象。 我明白,我需要像 .filter 这样的东西来

回答 8 投票 0

自定义分类法在 WooCommerce 中按字母顺序对术语进行分组

我对 woocommerce 中的产品有一个品牌分类法。我需要按品牌对产品进行排序。 我感兴趣如何通过代码进行以下操作: 有什么想法吗?

回答 1 投票 0

如何在R中对每个组进行相关性测试并将结果存储在列表中?

注意:我尝试使用 R 中的第三列中的每个组的两列之间的相关性测试来解决此问题,但没有成功 我有以下数据 > x = data.frame(年份...

回答 1 投票 0

将数组分成几组,最后几个具有最大的大小

如果数组无法均匀划分,我想将数组分成几组,最后几组的大小最大。就像2024年欧洲杯预选赛有53支球队分成10个

回答 1 投票 0

按第一个元素分组,查找第二个元素的范围

对于这样的列表(按第一个元素和第二个元素排序): [[1,3],[1,4],[1,5],[1,7],[1,8],[1,10],[3,5],[3,6],[ 3,8],…] 我想要一个按第一个元素分组并给出 r 的函数...

回答 1 投票 0

合并两个二维数组的行,对一列进行分组,并在每个组内的另一列中附加非空值

我正在重构一个日历应用程序。该日历具有用户定义的网格(可以进行预订的时段),但也需要显示“离网”预订。想想“常规”...

回答 3 投票 0

对 Laravel 集合进行分组和翻转,为每个分组值创建分隔键值

如何根据价值观对集合进行分组?例如这个: 收藏 {#250 ▼ #items: 数组:4 [▼ “CASSETE_1”=>“500” “CASSETE_2” => &qu...

回答 3 投票 0

如何将子产品/(即行)滚动到主产品/(即仅一行)

我正在尝试完成一些可能很简单但我看不到的事情。我有几行“子产品”需要汇总成“主产品”,只需一行。我

回答 1 投票 0

按两列对二维数组进行分组,并将映射到第一级键的值连接起来

我有一系列商店的营业/关门时间: 数组:3 [▼ 1 => 数组:2 [▼ “opens_at” => “10:00” “结束时间”=>“18:00” ] 2 =>...

回答 2 投票 0

按给定键对 Laravel 集合进行分组

在 Laravel 中,如果同一用户数组有多个响应,我想更改响应 我用这个函数得到了回应 控制器.php 公共函数索引(){ $reports = Report::all(); 返回...

回答 2 投票 0

将 Laravel 集合结果按一列分组,保留每组的第一项,并从组中的另一列创建逗号分隔值

我有一个包含重复结果的集合,但相关字段中有不同的数据。我想消除重复项,但通过组合该字段的值来保留其他数据。我似乎不能...

回答 2 投票 0

按列对多维数组中的数据行进行分组,并合并另一列中的子数组

我正在尝试按一列值(order_id)对 3d 数组中的数据进行分组,并合并每组内产品列中的子数组值。 样本数据: $ordersGlobal = [ [ ”

回答 2 投票 0

Js分组用户均等分配算法

给定n个值为v的用户,将用户分为g组,使每组用户的值之和的值相似,每组的用户数必须等于...

回答 1 投票 0

汇总分组集

我有一个使用 Oracle ROLLUP 函数的表和视图。 详细信息请参考这里:dbfiddle。 我想知道是否可以使用 ROLL 只计算某些列的总和...

回答 1 投票 0

如何限制群组?

这是我学习Python的第一天,也是我的第一个项目。所以我的数据中有 62 个项目,希望它随机挑选出其中的 48 个,并将它们随机放入 4 个一组中。所以总共...

回答 1 投票 0

如何在变量分组依据值上显示每个分组的 SSRS 中的行数?

本质上,我希望每个分组有单独的行数。我相信我应该使用 RowNumber。这似乎已经讨论过,但由于我的 groupby ...

回答 2 投票 0

通过条件为R中同一组的所有成员分配逻辑值

我有以下数据框: 家庭 <- data.frame(family=c('1', '1', '1', '2', '2', '3', '3'), name=c('John', 'Anitta', 'Steven', 'Stella', 'Robert', 'Adam', '

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.