Страницы: 1
RSS
Сводная: Не могу разобраться со связями между таблицами
 
Добрый день.
Прошу помочь разобраться почему напротив названия выстраивается 4 показателя, хотя должен только один. Показатели нужны именно из таблицы Критерии, а не из той же, в которой сами названия - Спецификация.
Изменено: Partizano _pl - 09.06.2022 09:47:23
 
Добавьте в значения сводной любую колонку с таблицы Спецификация
 
Цитата
написал:
Добавьте в значения сводной любую колонку с таблицы Спецификация
Блин точно.
Дай Бог тебе здоровья, милый человек
 
Цитата
написал:
Добавьте в значения сводной любую колонку с таблицы Спецификация
Да, но только у меня все равно проблема. Мне не нужны значения из таблицы Спецификация, мне нужны значения из третьей таблицы, которая будет связана по полю Категория со Спецификацией через Справочник. И, если я перетягиваю в Значения какое-то значение из третьей таблицы, то оно четверится.

Пример во вложении
Изменено: Partizano _pl - 09.06.2022 09:31:49
 
??? с какой третьей таблицы. в примере их всего две
 
Цитата
написал:
??? с какой третьей таблицы. в примере их всего две
Я вложил новое продолжение примера
 
Проверьте, файл тот же самый
 
Цитата
написал:
Проверьте, файл тот же самый
Я вложил в свое третье сообщение. Но теперь уже и в первом поменял.
 
Цитата
Partizano _pl написал:
Да, но только у меня все равно проблема.
а что Вы хотите получить на выходе? В таблице с ценами есть только категории. Зачем Вы суете в сводную "наименование" из "Спецификации", если этих данных нет в таблице с ценами? Либо пример составлен не верно, либо я не понимаю Ваши хотелки.
 
Цитата
написал:
Цитата
Partizano _pl написал:
Да, но только у меня все равно проблема.
а что Вы хотите получить на выходе? В таблице с ценами есть только категории. Зачем Вы суете в сводную "наименование" из "Спецификации", если этих данных нет в таблице с ценами? Либо пример составлен не верно, либо я не понимаю Ваши хотелки.
Есть две таблицы. В одной есть категории и цена каждой категории, во второй - товар, который относится к каждой из категорий. Нужно создать третью, в которой будет товар с ценой, соответствующей той категории, к которой он принадлежит. Вроде все просто. Но, когда я собираю таблицу, и вставляю товар из дной таблицы, а категорию из второй, то рассчитываю на то, что excel по связям сопоставит к какой категории относится этот товар и в третьей колонке выдаст цену нужной категории. А по факту высвечиваются все 4 категории, вместо одной к каждому товару, и 4 цены.
 
вот так?

мера для цены

Код
=SUMX(ADDCOLUMNS('Спецификация';"_q";SUMX(RELATEDTABLE('Цена');'Цена'[Цена]));[_q])


только зачем делать доп. таблицу с ценой если можно цену включить в таблицу Справочник?
Изменено: mechanix 85 - 09.06.2022 12:15:57
 
Зачем цена в отдельной таблице? Не нужно излишне денормализовывать данные. Цену можно указать в справочнике категорий.
 
Цитата
написал:
вот так?

мера для цены

Код
    [URL=#]?[/URL]       1      =SUMX(ADDCOLUMNS(  'Спецификация';"_q";SUMX(RELATEDTABLE('Цена');'Цена'[Цена]));[_q])   
 

только зачем делать доп. таблицу с ценой если можно цену включить в таблицу Справочник?
Да. Теперь получил то, что хотел. Спасибо еще раз!
 
Цитата
написал:
Зачем цена в отдельной таблице? Не нужно излишне денормализовывать данные. Цену можно указать в справочнике категорий.
Эти данные приходят из разных источников, сформированные так, как в примере.
 
Partizano _pl, добрый день!

Еще 2 варианта SQL запросом (см Лист1 и Лист2 во вложении)
код:
Код
Private Sub CREATE()
Dim myConnect As Object, mySQL As String, myRecord As Object, QT As QueryTable
Dim DataRange As String, strAddress As String, wshTarget As Worksheet
        Set myConnect = CreateObject("ADODB.Connection")
        myConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ActiveWorkbook.FullName & ";" & _
           "Extended Properties=""Excel 12.0;HDR=YES"""
    Set myRecord = CreateObject("ADODB.Recordset")

    mySQL = "SELECT [Наименование], [Категория], (SELECT [Цена] FROM [Цена$] WHERE [Цена$].[Категория] =[Спецификация$].[Категория]) as [Цена] FROM [Спецификация$] WHERE [Наименование] IS NOT NULL ORDER BY [Наименование]  "
    myRecord.Open mySQL, myConnect
    Set wshTarget = Worksheets("Лист1")
With wshTarget
    .Cells.Clear
    Set QT = .QueryTables.Add(myRecord, .Range("A1"))
    QT.Refresh
    
End With
    Dim conn
    For Each conn In ActiveWorkbook.Worksheets("Лист1").QueryTables
        conn.Delete
    Next conn
    Set QT = Nothing
    myRecord.Close
    Set myRecord = Nothing
End Sub

Private Sub CREATE_2()
Dim myConnect As Object, mySQL As String, myRecord As Object, QT As QueryTable
Dim DataRange As String, strAddress As String, wshTarget As Worksheet
        Set myConnect = CreateObject("ADODB.Connection")
        myConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ActiveWorkbook.FullName & ";" & _
           "Extended Properties=""Excel 12.0;HDR=YES"""
    Set myRecord = CreateObject("ADODB.Recordset")

    mySQL = "SELECT [Категория], (SELECT COUNT([Наименование]) FROM [Спецификация$] WHERE " & _
    "[Спецификация$].[Категория]=[Справочник$].[Категория]) as [Количество], " & _
    "[Количество] * (SELECT [Цена] FROM [Цена$] WHERE [Цена$].[Категория] =[Справочник$].[Категория]) as [Цена] " & _
    "FROM [Справочник$] WHERE [Категория] IS NOT NULL"
    
    myRecord.Open mySQL, myConnect
    Set wshTarget = Worksheets("Лист2")
With wshTarget
    .Cells.Clear
    Set QT = .QueryTables.Add(myRecord, .Range("A1"))
    QT.Refresh
End With
    Dim conn
    For Each conn In ActiveWorkbook.Worksheets("Лист2").QueryTables
        conn.Delete
    Next conn
    Set QT = Nothing
    myRecord.Close
    Set myRecord = Nothing
End Sub
Изменено: artemkau88 - 10.06.2022 15:06:57
Страницы: 1
Наверх