如何确定表中可能的组合?

时间:2015-02-02 19:39:48

标签: c# sql sql-server ssas

我的表格包含以下4维列和1个度量列Col1Col2Col3Col4,度量

维度列的基数分别为abcd

在我的应用程序中,用户可以在每列中选择任意数量的值,即多选,我需要运行查询以查找该组合的总测量值。

因此理论上,在最坏的情况下,最大可能组合数为(2^a-1) * (2^b-1) * (2^c-1) * (2*d-1)

现在我想知道我的真实数据集中可能有多少实际组合,我认为这些组合会少得多,因为在现实生活中并非所有组合都是可能的。

是否有一些SQL查询或任何其他方式(使用C#可能)从实际数据中确定此数字?

我的文件为.csv,也在我的SQL服务器数据库中。

这是ex:for for two dimension columns

用户,行动,请求


U1,A1,10

U1,A2,5

U2,A3,4

理论上的最大组合可能是: (2 ^ 2)*(2 ^ 3)= 4 * 8 = 32

但实际上,可能的组合只有10个

  1. U1 + A1
  2. U1 + A2
  3. U1 + A1 + A2
  4. U1
  5. A1
  6. A2
  7. A1 + A2
  8. U2 + A3
  9. U2
  10. A3

1 个答案:

答案 0 :(得分:0)

如果您拥有每列的不同值的数量(称为nAnBnCnD),则可能的选择总数为2^nA * 2^nB * 2^nC * 2^nD。每列2^n(而非2^n - 1),因为每个不同的值都有2个状态(已选中或未选中)。您可以将其视为长度为n的二进制字符串。

您可以通过多种方法确定每列的不同值的数量。

  • 您可以查询数据库本身

    SELECT count(sub.colA) FROM (SELECT DISTINCT colA FROM Table) as sub

  • 从csv文件中读取数据后,您可以查询程序存储器中已有的数据(例如LINQ)

    int nA = docs.GroupBy(x => x.colA).Count();

一旦掌握了所有数字,只需取幂并乘以。为避免溢出,您可以查看BigInteger等内容。