标签: cross-join

DAX/PowerPivot查询功能可在一段时间内传播聚合值

我正在尝试计算DAX表达式[对于Excel 2010中的MS PowerPivot],以便在应用的范围内均匀分配值的总和,并在给定的时间跨度/周期内对其进行重新求和.在SQL服务器中交叉应用是微不足道的,尽管每次尝试都会导致相同的错误结果.

我已将MS Project的输出保存为Excel并使用PowerQuery导入/转换,因此开始和结束/结束日期是正确的日期,{X} h和{Y} d是整数,以及日历之间的持续时间它们已经为模型计算/格式化.我还创建了一个日期表,其中包含从第一个日期到最后一个日期的连续日期,以及一个年份表,其中包含我想要汇总的4位数年份的字符串表示.

模型看起来像这样:

PowerPivot模型

我已经在ResourceQuery,TaskQuery和AssignmentQuery表上创建了计算列(所有这些都直接来自MS Project输出),以及ServiceAreaQuery(来自TaskQuery的唯一值......基本上是子项目).每个还有一个简单的度量,它是Assigned hours列的总和.

数据本身看起来像您期望的Project 2010文件,并具有{start_date},{finish_date}和小时.任务的日期可以跨越1天到5年......这就是我的问题所在.

如何为长时间运行的任务拆分/分块预先求和的值以匹配我正在寻找的时间间隔?

即使我使用日期表中的年份列,时间智能也没有抓住它并且我已经没有计算CALCULATE(SUM(FILTER(COUNTROWS(DATESBETWEEN)))类型的东西了.

有两个中间步骤,我试图找出无济于事.我认为它们都是通过相同的有效功能来解决,以达到小时最终目标,服务区域,资源,年份.

透视表显示

  • 按年计算的资源小时数
  • 按服务区划的小时数,按年份计算

为了显示最终目标

  • 按服务区域,按资源划分的小时数,按年份计算

您可以在下面的输出中看到该问题.

错误的输出示例

请注意,当使用分配的小时总数和AssignmentQuery中的资源名称时,我得到正确的总和,但是当使用任何日期值时...我只得到开始日期的小时数(模型中的活动关系).我需要的是这些时间在它们适用的时期内均匀分布(因此,如果在2016年1月1日至1月1日之间有1000小时的话,我希望每年有333小时的时间显示) .

我最初的想法是选择器/过滤器/计算功能需要执行以下操作:

  • 选择此人的小时数
  • 从过滤器或列标题中选择过滤到的时段中的天数(例如月/年/季/任何)
  • 计算每天的小时数
  • 获取过滤期间的工作日
  • 从重叠中选择小时的总和

任何想法都非常感谢!我愿意做一些额外的ETL /数据创建作为PowerQuery步骤,但是我真的想为此找出正确的DAX表达式,因此它可以作为项目的时间切片器/过滤器.

提前致谢.

**编辑发布修改后的答案**

[Hours Apportioned Raw] :=
DIVIDE (
    CALCULATE (
                [Hours],
                FILTER (
                    AssignmentQuery,
                    AssignmentQuery[Start_Date] <= MAX ( Dates[Date] )
                        && AssignmentQuery[Finish_Date] >= MAX ( Dates[Date] )
                        )
                )
    , ( COUNTROWS (
                    DATESBETWEEN ( 
                                    Dates[Date]
                                    , FIRSTDATE ( AssignmentQuery[Start_Date] )
                                    , …
Run Code Online (Sandbox Code Playgroud)

excel-formula cross-join business-intelligence powerpivot dax

4
推荐指数
1
解决办法
2568
查看次数

交叉产品和natura连接之间的区别

我正在研究自然连接,我很困惑,在用SQL编写时,我怎么知道我应该使用交叉产品还是自然连接.

sql natural-join cartesian-product cross-join

4
推荐指数
1
解决办法
1万
查看次数

内存高效的笛卡尔加入PySpark

我有一个庞大的字符串数据集,可以放入我的spark集群中的单个节点上的内存中.问题是它占用了单个节点的大部分内存.

这些ID长约30个字符.例如:

ids
O2LWk4MAbcrOCWo3IVM0GInelSXfcG
HbDckDXCye20kwu0gfeGpLGWnJ2yif
o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
Run Code Online (Sandbox Code Playgroud)

我希望写入所有id对的列表.例如:

id1,id2
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,HbDckDXCye20kwu0gfeGpLGWnJ2yif
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
HbDckDXCye20kwu0gfeGpLGWnJ2yif,O2LWk4MAbcrOCWo3IVM0GInelSXfcG
# etc...
Run Code Online (Sandbox Code Playgroud)

所以我需要交叉加入数据集本身.我希望使用10节点集群在PySpark上执行此操作,但它需要内存效率.

cartesian-product cross-join apache-spark pyspark

4
推荐指数
1
解决办法
8565
查看次数

R data.table :(动态)前瞻性交叉连接

我想知道在data.table中是否有一个CJ()方法的选项来获取由评估条件形成的向量而不是运行完整的交叉连接.

数据

library(data.table)
df<-data.table(
  ID=c(18L,  18L,  18L,  46L,  74L,  74L, 165L, 165L), 
  cat=c(1300L, 1320L, 1325L, 1300L, 1300L, 1325L, 1300L, 1325L),
  low=c(24.625, 16.250, 14.500, 43.625, 58.250, 45.375, 90.750, 77.875),
  high=c(26.625, 17.500, 15.500, 45.625, 60.000, 47.375, 92.750, 79.875)
  )

df
    ID  cat    low   high
1:  18 1300 24.625 26.625
2:  18 1320 16.250 17.500
3:  18 1325 14.500 15.500
4:  46 1300 43.625 45.625
5:  74 1300 58.250 60.000
6:  74 1325 45.375 47.375
7: 165 1300 90.750 92.750
8: 165 1325 …
Run Code Online (Sandbox Code Playgroud)

r cross-join data.table

4
推荐指数
2
解决办法
104
查看次数

使用 CROSS JOIN 进行超慢查询

我有两个名为 table_1 (1GB) 和引用 (250Mb) 的表。

当我查询引用的交叉联接时,更新 table_1 需要 16 小时。我们更改了 XFS 的系统文件 EXT3,但仍然需要 16 小时。我做错了什么?

这是更新/交叉连接查询:

  mysql> UPDATE table_1 CROSS JOIN reference ON
  -> (table_1.start >= reference.txStart AND table_1.end <= reference.txEnd)
  -> SET table_1.name = reference.name;
  Query OK, 17311434 rows affected (16 hours 36 min 48.62 sec)
  Rows matched: 17311434  Changed: 17311434  Warnings: 0
Run Code Online (Sandbox Code Playgroud)

这是table_1的显示创建表和参考:

    CREATE TABLE `table_1` (
     `strand` char(1) DEFAULT NULL,
     `chr` varchar(10) DEFAULT NULL,
     `start` int(11) DEFAULT NULL,
     `end` int(11) DEFAULT NULL,
     `name` varchar(255) DEFAULT NULL, …
Run Code Online (Sandbox Code Playgroud)

mysql performance cross-join

3
推荐指数
1
解决办法
6017
查看次数

如何使用 generate_series() 生成值网格

我想生成一个(行,列)对的网格,例如:

1 | 1
1 | 2
1 | 3
...
2 | 1
2 | 2
...
Run Code Online (Sandbox Code Playgroud)

我天真的方法有这种令人费解的行为:

select generate_series(1,5), generate_series(1, 5);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               5
(5 rows)

select generate_series(1,5), generate_series(1, 4);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               1
               1 |               2
               2 |               3
               3 |               4
               4 |               1
               5 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql cross-join generate-series set-returning-functions

3
推荐指数
1
解决办法
837
查看次数

CROSS JOIN 和一个 FROM 中的多个表有什么区别?

有什么不同?

SELECT a.name, b.name
FROM a, b;

SELECT a.name, b.name
FROM a
CROSS JOIN b;
Run Code Online (Sandbox Code Playgroud)

如果没有区别那为什么两者都存在呢?

sql inner-join cross-join

3
推荐指数
1
解决办法
2168
查看次数

BigQuery argmax:执行 CROSS JOIN UNNEST 时是否保持数组顺序

问题:

在 BigQuery、标准 SQL 中,如果我运行

SELECT *
FROM mytable
CROSS JOIN UNNEST(mytable.array)
Run Code Online (Sandbox Code Playgroud)

我可以确定生成的行顺序与数组顺序相同吗?

例子:

假设我有下表mytable

Row | id   | prediction
1   | abcd | [0.2, 0.5, 0.3]
Run Code Online (Sandbox Code Playgroud)

如果我运行SELECT * FROM mytable CROSS JOIN UNNEST(mytable.prediction),我可以确定行顺序与数组顺序相同吗?即结果表将始终是:

Row | id   | unnested_prediction
1   | abcd | 0.2
2   | abcd | 0.5
3   | abcd | 0.3
Run Code Online (Sandbox Code Playgroud)

有关用例的更多背景信息(argmax):

我试图找到每行中数组的最大值(argmax)的数组索引,即0.5上面数组中的第二个元素()。因此,我的目标输出是这样的:

Row | id   | argmax
1   | abcd | 2
Run Code Online (Sandbox Code Playgroud)

使用按值排序的窗口函数CROSS JOIN和查找argmax 的窗口函数,我可以使用一些测试数据来实现此目的。您可以使用以下查询进行验证:DENSE_RANKpredictionROW_NUMBER …

arrays cross-join google-bigquery argmax

3
推荐指数
1
解决办法
3703
查看次数

Apache Spark 与数据集的交叉连接非常慢

我已经在 Spark 用户论坛上发布了这个问题,但没有收到回复,所以在这里再次询问。

我们有一个用例,需要进行笛卡尔连接,但由于某种原因,我们无法让它与数据集 API 一起工作。

我们有两个数据集:

  • 一个包含 2 个字符串列的数据集,例如 c1、c2。这是一个小型数据集,约有 100 万条记录。这两列都是 32 个字符的字符串,因此应小于 500 mb。

    我们广播这个数据集

  • 另一个数据集稍大一些,有约 1000 万条记录
val ds1 = spark.read.format("csv").option("header", "true").load(<s3-location>).select("c1", "c2")
ds1.count
val ds2 = spark.read.format("csv").load(<s3-location>).toDF("c11", "c12", "c13", "c14", "c15", "ts")
ds2.count
ds2.crossJoin(broadcast(ds1)).filter($"c1" <= $"c11" && $"c11" <= $"c2").count
Run Code Online (Sandbox Code Playgroud)

如果我使用 RDD api 实现它,在 ds1 中广播数据,然后在 ds2 中过滤数据,那么它工作得很好。

我已确认广播成功。

2019-02-14 23:11:55 INFO CodeGenerator:54 - 代码在 10.469136 ms 内生成 2019-02-14 23:11:55 INFO TorrentBroadcast:54 - 开始读取广播变量 29 2019-02-14 23:11:55 INFO TorrentBroadcast:54 - 读取广播变量 29 花费了 6 毫秒 …

join cross-join apache-spark apache-spark-dataset

3
推荐指数
1
解决办法
4258
查看次数

如何在 Laravel 中动态交叉连接?

我想创建如下图所示的产品变体: 在此输入图像描述

我尝试过使用静态数据,它可以工作。

$collection = collect(["XL", "XXL"]);
return $collection->crossJoin(["1kg", "2kg"], ["Red", "Green"]);
Run Code Online (Sandbox Code Playgroud)

但我想动态地创建它。我已经尝试过这种方式。

$collections = [];
foreach ($request->options as $key => $option) {
  if($key == 0) continue;
  array_push($collections, $option["option_values"]);
}

return $collection->crossJoin($collections);
Run Code Online (Sandbox Code Playgroud)

它的返回像这样的图像。这并不完全是我想要的。我发现问题是 $collections 是一个新数组以及该数组内的选项值。所以就这样返回了。但我无法解决这个问题。

在此输入图像描述

我已经添加了我的请求数据。

在此输入图像描述

collections cross-join laravel

3
推荐指数
1
解决办法
1317
查看次数