Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
PQ/PBI узнать откуда выполняется обновление, из десктопа или из службы pbi/ репортсервера
 
Добрый день!
Есть опубликованный в https://app.powerbi.com/ дашборд, в дашборде есть ЗапросХ. Дашборд регулярно дорабатывается в десктопе (и соответственно обновляется). Необходимо чтоб ЗапросХ выполнялся/обновлялся только если обновление происходит с сервера.
Есть какие нибудь варианты при выполнении запроса в PQ определить, запрос выполняется из десктопа или с сервера pbi?

Изначально мне решение показалось очень простым, типа взять какую нибудь папку, которая точно есть на компе, но нет на сервере pbi (например "c:/users"), и если она существует, значит обновление происходит из десктопа, если нет - с сервера.
Т.е. если try ( Folder.Files("c:/users") ) [HasError] - значит запрос с сервера и можно обновлять ЗапросХ, если же [HasError] = false - значит из десктопа и ничего не обновляй.
Но проблема в том, что при публикации дашборда необходимо подключить все источники данных, поэтому при подключении "c:/users" она как бы в любом случае будет существовать, поэтому этот вариант оказался неработоспособен.

Вторая попытка - запулить через web.page() JS скрипт, который бы возвращал computerName, и исходя из этого имени уже определять откуда идет выполнение запроса. Но это тоже не сработало, т.к. из веба невозможно получить computerName.

Прошу поделиться идеями как еще это можно было бы решить (определить откуда происходит запрос на выполнение запроса, из десктопа или с сервера)?
DAX наложение на таблицу условия ALL/ALLSELECTED в зависимости от выбранного параметра
 
Чтоб лучше стало понятно чего я хочу, добавил в пример вторую меру (Мера2), в которой таблица как раз фильтруется в зависимости от выбранного значения в срезе2.
Поскольку там применяется фильтрация конкретного столбца (а не всей таблицы), то все работает (о чем я писал выше, про "простые условия фильтрации").
Вот как бы таким же образом накладывать ALL/ ALLSELECTED на таблицу, чтоб не повторять в мере кучу раз одни и те же фрагменты кода.
DAX наложение на таблицу условия ALL/ALLSELECTED в зависимости от выбранного параметра
 
Вопрос такой:
допустим есть какая-то таблица и слайсер, который переключается в положения 1, 2 и 3.
В зависимости от выбора на слайсере надо сделать (далее цифра соответствует выбору на слайсере):
1 - просто посчитать сумму:
Код
 CALCULATE( SUM( какое-то числовое поле таблицы) ) 


2 - посчитать сумму, убрав контекст с одного столбца:
Код
 CALCULATE(
SUM( какое-то числовое поле таблицы),
ALL('Таблица'[Столбец1])
)


3 - посчитать сумму, убрав контекст со всей таблицы:
Код
 CALCULATE(
SUM( какое-то числовое поле таблицы),
ALL('Таблица')
)


Можно ли, в целях НЕповторения кода, реализовать наложение условия ALL на таблицу в зависимости выбора на слайсере? Типа: если выбрано то-то, то наложи на таблицу ALL по столбцу 1, а если выбрано се-то, то наложи ALL на всю таблицу.
Подготовил пример, там есть "Мера1". В первом варианте она считается "длинно" (с повторениями кода), во втором варианте (закомментирован тамже в мере ниже) как бы хотелось сократить ее написание.

Простые условия фильтрации таблицы в зависимости от параметра, типа "если в параметре выбрано 1, то наложи условие, что 'Таблица'[Столбец1]="красный", а если нет, то что 'Таблица'[Столбец1]="зеленый" ", работают.
Но когда дело касается наложения ALL/ ALLSELECTED, то компилятор ругается.

Возможно нифига непонятно из того что я написал, но в примере думаю будет возможно понять о чем речь.
Надо там раскомментировать variable "short solution" и соответственно его вернуть в Result.
Изменено: VasiliY_Seryugin - 13.03.2023 14:29:59
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
SUMMARIZECOLUMNS еще с этим справляется хорошо, и как я понял там нет никаких рекомендательных ограничений на использование вычислений внутри самой функции (нет необходимости оборачивать в ADDCOLUMNS).
Код
Table2=
SUMMARIZECOLUMNS(
    Table1[Наименование клиента],
    Table1[Дата платежа],
    "Максимальная дата платежа по клиенту",
        CALCULATE( MAX(Table1[Дата платежа]), ALL( Table1[Дата платежа]) )
)
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
surkenny, все понятно, большое спасибо за помощь!
Теперь ясно почему вариант с "отсамурайженной" таблицей работает  :)

Тогда по идее, допустим если нет возможности поменять тип данных в PQ, то можно заморочиться и снять все контексты календаря с конкретным их перечислением.
Сейчас попробую это сделать.

Ну да, с принудительным перечислением всех полей иерархии внутри ALL тоже начинает работать:
Код
Table2 = 
ADDCOLUMNS(
    Table1,
    "Максимальная дата платежа по клиенту",
    CALCULATE(MAX(Table1[Дата платежа]),
        ALL(Table1[Дата платежа].[Date],
            Table1[Дата платежа].[Год],
            Table1[Дата платежа].[День],
            Table1[Дата платежа].[Квартал],
            Table1[Дата платежа].[Месяц],
            Table1[Дата платежа].[№Квартала],
            Table1[Дата платежа].[№Месяца]
            /*, Table1[Дата платежа] --не принимает в рамках одного ALL выражения, нужно выносить в отдельный ALL */
        ),
        ALL(Table1[Дата платежа])
    )
)
Изменено: VasiliY_Seryugin - 18.07.2022 17:35:42
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
При этом вот так работает, если я подсовываю в ADDCOLUMNS не оригинальную Table1, а сведенную через SUMMARIZE (при этом сведенная таблица на 100% эквивалентна оригинальной, те же самые 2 столбца как и у оригинала):
Код
Table2 =
ADDCOLUMNS(
    SUMMARIZE(
        Table1,
        [Наименование клиента],
        [Дата платежа]
    ),
    "Максимальная дата платежа по клиенту",
    CALCULATE(MAX(Table1[Дата платежа]), ALL(Table1[Дата платежа]))
)


Итого если в ADDCOLUMNS скармливать оригинал Table1, то все равно остается контекст строки по [Дате платежа], даже при попытке через CALCULATE передать туда все даты платежа и найти максимальную из них.
Изменено: VasiliY_Seryugin - 18.07.2022 16:58:47
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Ребят, подскажите пожалуйста еще по такому кейсу.
Вопрос элементарный, но я не понимаю что не так делаю и почему оно не работает.
Во вложенном примере есть исходная Table1, в ней 2 поля: "Название клиента" и "Дата платежа".
Делаю расчетную таблицу Table2, через ADDCOLUMNS пытаюсь добавить в нее столбец, который бы выводил максимальную дату платежа для соответствующего клиента. Т.е. для "Клиент1" в каждой строке должно отобразиться "01.07.2021", для "Клиент2" - "01.03.2022".
Почему мой вариант не работает?

Код
Table2 = 
ADDCOLUMNS(
    Table1,
    "Максимальная дата платежа по клиенту",
    CALCULATE(
        MAX(Table1[Дата платежа]),
        ALL('Table1'[Дата платежа])
    )
)



Почему через ALLEXCEPT оно работает, когда я снимаю все контексты кроме контекста "Название клиента", но при этом не работает, когда я снимаю контекст конкретно с "Даты платежа" (по умолчанию контекст "Названия клиента" должен оставаться, и в итоге оно должно быть эквивалентно вышеуказанному варианту с ALLEXCEPT).
Вот так работает:
Код
Table2 = 
ADDCOLUMNS(
    Table1,
    "Максимальная дата платежа по клиенту",
    CALCULATE(
        MAX(Table1[Дата платежа]),
        ALLEXCEPT(Table1,Table1[Наименование клиента])
    )
)
Изменено: VasiliY_Seryugin - 18.07.2022 12:38:18
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Ребят, спасибо за помощь!
surkenny, спасибо за статью!
С GROUP BY все работает, вот так все хорошо считает:
Код
PRIMER = 
--Делаем свод из Data по Store, Date и сумме Sales
VAR Tbl1=
SUMMARIZE(
    'Data',
    [Store],
    [Date],
    "Sum Sales",
        CALCULATE(SUM('Data'[Sales]))
)

--Делаем свод из Tbl1 по Store и сумме Sum Sales
VAR Tbl2=
GROUPBY(
    Tbl1,
    [Store],
    "Сумм",
    SUMX(CURRENTGROUP(),[Sum Sales])
)
                
RETURN Tbl2


И да, я понял что не надо аггрегации внутри SUMMARIZE делать :) Это просто как пример корректировки прошлого кода, только который работает.
Изменено: VasiliY_Seryugin - 15.07.2022 17:34:30
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Спасибо за совет. Пока не читал, обязательно почитаю.
Но вообще оно корректно работает, и в документации к SUMMARIZE это предусматривается (делать вычисления).
Это с производительностью связано?
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Сразу по Store не могу сделать группировку.
Я выше писал, что привел задачу упрощенно. В оригинале Tbl1 считается вот так (код ниже). А из него потом нужно сделать свод Tbl2 по полям [ID DWH плательщика] и суммой по полю [МаксДниЗаДату].
Сразу из исходных данных я не могу такой свод сделать (точнее могу, но код будет километровый). Поэтому сначала создаю промежуточную таблицу Tbl1, которую потом и планирую свести в 2 итоговых столбца.
При этом естественно я могу Tbl1 посчитать не табличным выражением, а отдельной физической таблицей, и потом уже к ней обратиться вторым кодом при создании Tbl2.
Но чтоб не плодить в модели таблицы (Tbl1 - таблица с промежуточными вычислениями, которые делаются только ради получения Tbl2, и далее Tbl1 использоваться нигде не будет), я хотел бы получить Tbl2 сразу в рамках одного запроса. Вот с этим проблема - как сделать свод из промежуточной таблицы (табличного выражения) Tbl1, если я не могу при ее обработке агрегировать (суммировать) ее поле [МаксДниЗаДату].

Код
VAR Segodnya= TODAY()
VAR Tbl1=
FILTER(
    SUMMARIZE(
        CALCULATETABLE(
            'Подключение к Кубу',
            DATESBETWEEN('Подключение к Кубу'[Дата платежа],DATEVALUE("01.01.2019"),Segodnya)
        ),
        [ID DWH плательщика],
        [Дата платежа],
        "Дата последнего планового платежа у клиента",
            CALCULATE(
                MAX('Подключение к Кубу'[Дата платежа]),
                ALLSELECTED('Подключение к Кубу'[Дата платежа]),
                'Подключение к Кубу'[Дата платежа] <= Segodnya
            ),
        // "Макс просрочки",CALCULATE(MAX('Подключение к Кубу'[Кол-во дней просрочки оплаты])),
        // "Макс задержки",CALCULATE(MAX('Подключение к Кубу'[Кол-во дней задержки оплаты])),
        "МаксДниПросрочекИлиЗадержекЗаДату",
            MAXX(
                UNION(
                    SELECTCOLUMNS('Подключение к Кубу',"ДниПросрочки",[Кол-во дней просрочки оплаты]),
                    SELECTCOLUMNS('Подключение к Кубу',"ДниЗадержки",[Кол-во дней задержки оплаты])
                ),
                [ДниПросрочки]
            ),
        "Платеж последних двух лет от даты последнего планового платежа",
            CALCULATE(MAX('Подключение к Кубу'[Дата платежа])) IN
                DATESBETWEEN('Подключение к Кубу'[Дата платежа],
                    EDATE(
                        CALCULATE(
                            MAX('Подключение к Кубу'[Дата платежа]),
                            ALLSELECTED('Подключение к Кубу'[Дата платежа]),
                            'Подключение к Кубу'[Дата платежа] <= Segodnya
                        ),
                        -24
                    ),
                    Segodnya
                )
    ),
    [Платеж последних двух лет от даты последнего планового платежа]=TRUE()
)
Изменено: VasiliY_Seryugin - 15.07.2022 16:44:17
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Да, все верно.
Вопрос именно в том, чтоб внутри одного кода сделать SUMMARIZE2 из SUMMARIZE1, и посчитать в SUMMARIZE2 агрегированное значение из SUMMARIZE1 (не создавая физическую таблицу Tbl1).

Код
PRIMER = 
--Делаем свод из Data по Store, Date и сумме Sales
VAR Tbl1=
SUMMARIZE(
    'Data',
    [Store],
    [Date],
    "Sum Sales for Store on Date",
        CALCULATE(SUM('Data'[Sales]))
)

--Делаем свод из Tbl1 по Store и сумме "Sum Sales for Store on Date"
VAR Tbl2=
SUMMARIZE(
    tbl1,
    [Store],
    "Sum Sales for Store AllDate", --!!!!!ВОТ ЭТУ ШТУКУ НАДО ПОСЧИТАТЬ КАК СУММУ ДЛЯ СООТВЕТСТВУЮЩЕГО STORE из Tbl1
        //CALCULATE(SUM([Sum Sales for Store on Date])) --так не примет 
        SUMX(Tbl1,[Sum Sales for Store on Date]) --так выведет сумму Sales по всем Store
        //SUMX( CALCULATETABLE(Tbl1),[Sum Sales for Store on Date]) --так выведет такой же результат что и строка выше
)

RETURN Tbl2
Изменено: VasiliY_Seryugin - 15.07.2022 15:02:34
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Спасибо за шаблон!
Добавил в PQ пару строк в исходную таблицу, чтоб был какой то смысл создавать Tbl1.
Создал таблицу PRIMER, в ней собственно суть вопроса - как сделать из Tbl1 повторный свод и посчитать сумму Sales для каждого стора в Tbl2.
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Ну там в Tbl1 достаточно сложные вычисления и агрегации происходят сначала, здесь я привел упрощенный пример.
Напрямую из исходных данных Tbl2 не получить, сначала исходные данные нужно сильно обработать, что у меня и делается в Tbl1.
DAX Сводные данные (SUMMARIZE) из табличного выражения
 
Всем привет.
Есть исходная Таблица1 в модели данных.
Я создаю новую Таблицу2, которая считается в 2 этапа:
VAR Tbl1 - создается табличное выражение через обработку Таблицы1 функцией SUMMARIZE, допустим оно содержит поля "ID клиента", "Дата платежа", "Дни задержки по платежу"
VAR Tbl2 - хочу сделать в том же коде создания Таблицы2 SUMMARIZE от Tbl1, где уже агрегировать данные только по "ID клиента" из Tbl1 (без строк с датами платежа), и в качестве расчетного поля также посчитать сумму по полю Tbl1 "Дни задержки по платежу".
Т.е. делаю:
VAR Tbl2=
SUMMARIZE(
   Tbl1,
   [ID клиента],
   "Сумма дней задержек оплат клиента", {тут д.б. формула суммы дней задержек оплат за все даты платежа по клиенту}
)

Не могу это сделать, т.к. чтоб посчитать сумму "Дней задержки по платежу" из Tbl1, не могу использовать CALCULATE (SUM ... (не работает с полями табличных выражений), а вариант через SUMX(Tbl1,[Дни задержки по платежу]) возвращает мне соответственно сумму всех дней задержки по платежу по всем ID клиента, а не по контексту конкретного ID.
Заворачивание SUMX в CALCULATE, чтоб попытаться передать контекст текущей расчитываемой строки сводной таблицы, тоже не работает (  CALCULATE(SUMX(Tbl1,[Дни задержки по платежу]) ), также возвращает сумму всех дней для всех клиентов, а не для текущего ID.

Итого вопрос: если у меня есть табличное выражение, как можно в том же коде сделать из него свод и сагрегировать (просуммировать) одно из его полей для каждой сводимой строки?
Как сделать отправку в Telegram из макроса VBA Excel, Telegram из макроса VBA Excel
 
Спасибо, но это не совсем то. В данном случае два отдельных сообщения будут посылаться, сначала отдельно сообщение с картинкой, потом отдельно текстовое сообщение.
Я же пытаюсь отправить одним сообщением картинку, которая в этом же сообщении будет сопровождаться определенным текстом.
Создание подпапок для полей сводной таблицы/ модели данных
 
Спасибо за ответ!
Группировку вы имеете ввиду уже выведенных на лист полей (отображенных)? Это не совсем то.
Я имею ввиду сгруппировать поля не в самой сводной таблице, выведенной на лист, а в конструкторе, где собственно и набираются поля для отображения на листе. Вот там хотелось бы сгруппировать поля по нужным блокам.
Создание подпапок для полей сводной таблицы/ модели данных
 
Всем привет!
Можно ли в экселе/ Power Pivot для полей сводной таблицы создать свои подпапки/ подкатегории.
Например у меня есть сводная таблица на основе модели данных, справа в экселе я вижу все поля сводной таблицы (либо в том порядке, в котором они загружены, либо их можно отсортировать по алфавиту, эксель 2019 такое умеет).
Допустим я вижу такой список полей:
- наименование клиента
- инн клиента
- регион клиента
- номер договора
- дата договора
- сумма договора

Если таких полей много, то с ними соответственно не очень удобно работать, хотелось бы их объединить в смысловые группы (например как в PBI, где можно создавать подпапки внутри таблицы и перетаскивать туда меры).
Можно ли как то сделать такие подпапки в полях сводной таблицы, чтоб я видел в списке полей сводной таблицы что-то типа:
Клиент>
   - наименование клиента
   - инн клиента
   - регион клиента
Договор>
   - номер договора
   - дата договора
Прочие поля>
   - сумма договора

?

Перерыл весь Power Pivot, не нашел такой возможности.
Как сделать отправку в Telegram из макроса VBA Excel, Telegram из макроса VBA Excel
 
Ребят, помогите к картинке прикрутить еще и текстовое описание.
У метода sendPhoto помимо указания чат-ID и photo есть еще опциональная возможность указывать caption (текст, который будет прикреплен к картинке).
Вроде все правильно делаю, но не хотят сообщения на русском прикрепляться, хотя и энкодирую их в UTF-8.
Если прикреплять сообщение английскими буквами, то все ок отрабатывает, с кириллицей же никак не хочет.

Код
Public Sub telegram_send_picture()
 
    Const URL = "https://api.telegram.org/bot"
    Const TOKEN = "bla-bla-bla:some_TOKEN"   ' тут токен бота
    Const METHOD_NAME = "/sendPhoto?"
    Const CHAT_ID = "-1234567890"            ' тут ID чата, куда послать картинку
       
    Const FOLDER = "C:\Тест бота Телеграмм\"    ' папка, в которой лежит картинка
    Const JPG_FILE = "Picture1.jpg"             ' имя картинки с расширением
    
    Dim msg$: msg = "Какой-то русский текст"    ' сообщение (описание), которое надо прикрепить к картинке. 
' Если сюда указать английский текст, то все отлично работает. С русскими буквами не хочет
    msg = EncodeUTF8noBOM(msg)                  ' переводим русский текст в UTF-8 (функция описана ниже)
     
    Dim data As Object, key
    Set data = CreateObject("Scripting.Dictionary")
    data.Add "chat_id", CHAT_ID                 ' добавляем в словарь чат-ID
    data.Add "caption", msg                     ' добавляем в словарь текст, который надо прикрепить к картинке, переведенный в UTF-8
     
    
    BOUNDARY = "--OYWFRYGNCYQAOCCT44655,4239930556"   ' разделитель для form-data
 
    'заполняем словарь форм датами чат-ID и сообщения
    Dim part As String, ado As Object
    For Each key In data.keys
        part = part & "--" & BOUNDARY & vbCrLf
        part = part & "Content-Disposition: form-data; name=""" & key & """" & vbCrLf & vbCrLf
        part = part & data(key) & vbCrLf
    Next
    
    ' filename
    part = part & "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""photo""; filename=""" & JPG_FILE & """" & vbCrLf & vbCrLf


    ' read jpg file as binary
    Dim jpg
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile FOLDER & JPG_FILE
    ado.Position = 0
    jpg = ado.read
    ado.Close
 
    ' combine part, jpg , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write jpg
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "---")
    ado.Position = 0
 
    Dim req As Object, reqURL As String
    Set req = CreateObject("MSXML2.XMLHTTP")
    reqURL = URL & TOKEN & METHOD_NAME
    With req
        .Open "POST", reqURL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        MsgBox .responseText
    End With
 
End Sub
 
Function ToBytes(str As String) As Variant
    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close
End Function

' перевод в UTF8
Function EncodeUTF8noBOM(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Else: t = l
        End Select
        EncodeUTF8noBOM = EncodeUTF8noBOM & t
    Next
End Function



В итоге в виде response приходит ошибка, что текст д.б. декодирован в UTF8. Но он ведь и декодирован.
[img]C:\Тест%20бота%20Телеграмм\Безымянный.jpg[/img]
DAX Создание расчетной таблицы через Summarize с переменным условием
 
Владимир, спасибо за ответ/совет. Так и сделаю.
Я просто хотел понять, действительно ли сводная таблица не может создаваться с внешним условием и каждый раз пересчитываться, когда внешнее условие (фильтрация несвязанной таблицы через срез) меняется.
Сейчас еще почитал немного документации у майкрософт, видимо действительно так нельзя, создаваемой сводной таблице по всей видимости плевать на контексты фильтров чего либо, кроме фильтров той таблицы, из которой она собственно строится.
DAX Создание расчетной таблицы через Summarize с переменным условием
 
По DAXу отдельного форума не нашел, смотрю все в эксель пишут, поэтому и я сюда же напишу.
Напишу скорее всего непонятно, но во вложенных примерах все видно и понятно.
Есть 2 несвязанных таблицы. В первой таблице (Заявки) столбцы "Номер заявки" и 3 столбца с датами: дата поступления заявки, дата подписания заявки и дата передачи в лизинг.
Создаю вычисляемую таблицу SlicerTable, с помощью которой можно было бы делать аналог связанных выпадающих списков: типа говоришь "хочу данные по дате поступления заявки", и тебе в срезе показываются только годы, которые есть в столбце "дата поступления заявки". Говоришь "хочу данные по дате подписания договора", и тебе в срезе только годы, которые есть в столбце "дата подписания договора", и т.д.
Сделал SliserTable, вывел 2 среза на лист, все работает.

Дальше есть таблица "Регионы". В ней есть поле с годом. Хочу, чтоб при выборе года в созданном срезе по годам у меня выводились на лист данные из "Регионы" только по выбранному году (напомню, что связи между таблицами нет. Можно конечно сделать костыль через дополнительную таблицу с уникальными годами, но я хочу понять как это без костыля сделать).
Создаю сводную вычисляемую таблицу из таблицы "Регионы", где говорю, что выведи мне регионы, кол-во заявок и сумму для этих регионов, но с условием, что год должен быть равен выбранному году на ранее выведенном срезе по годам. И вот эта операция не работает. Т.е. если я просто создаю сводную таблицу и в условие какой год показывать вбиваю статичную цифру (например, 2020), то сводная строится и все ок. Если же я ей в условие говорю что постройся только по году, равному году в срезе (SELECTEDVALUE), то таблица выводится пустой.
Во вложении эксель и pbix, там все должно быть понятно.

Вопросы:
1. Видимо существует какое-то правило, что в вычисляемой таблице условиями вычисления не могут быть переменные?
2. Как можно это обойти, не строя костыльную таблицу для связывания SlicerTable и "Регионы" по годам?
Selenium работа с Chrome
 
Андрей Лящук, драйвер кладу в папку, куда установил Selenium.
А установил его на Диск C\Users\..имя пользователя...\AppData\Local\SeleniumBasic.

Компьютер не личный, рабочий, я не под админскими правами на нем. Может в этом быть причина тоже?
В настройках браузера сверху надпись "Этим браузером управляет ваша организация". При обычной работе с браузером никаких проблем и ограничений не замечал. Но возможно для обращения к браузеру программным методом нужны права администратора. Как думаете, какова вероятность, что причина в этом?
Selenium работа с Chrome
 
Ну да, это видимо именно несовместимость chromedriver в папке Seleniumа с самой версией Хрома.
Скачал с Гугла 4 последние версии chromedriver, поочереди их поместил в папку с Селениумом, протестил, всегда возникает такая же ошибка, что мол версия Хрома 88.0.4324.150, версия драйвера такая-то.
Теперь остается вопрос где взять chromedriver для Хрома 88.0.4324.150, если его (драйвера) нет на оф.сайте.
Либо ждать, что он скоро появится, либо версию Хрома откатывать на более старую.
Разделение строк по содержимому ячейки
 
Если честно, вообще ничего не понятно.
Есть ячейка B2, в ней прописан текст "От 0,10 (1,0) до 0,63 (6,3) включ.".
Где то видимо есть ряд значений  "0,1", "0,25", "0,63", "1,0", "1,6", "2,5", ... ", лучше указать где именно он есть.
Какую ячейку нужно разделить на количество строк? И что вообще такое "разделить ячейку на строки"?
Selenium работа с Chrome
 
Всем привет!
Скачал селениум, установил, скачал новый chromedriver, заменил в папке селениума родной Chromedriver.exe на вновь скачанный.
Библиотека Selenium в Reference.Tools появилась, установил, пытаюсь работать. Определение переменной как new webdriver/ new chromedriver понимает, не ругается.
Но при .start "Chrome" или .Get "http://блабла"  выдает ошибку Session not created, и чето там про версию Хрома.
Я так понимаю, что для моей версии Хрома нужен другой драйвер. Посмотрел свою версию браузера: Версия 88.0.4324.150 (Официальная сборка), (64 бит).
Залезаю на сайт Гугла с драйверами, нет драйвера для такой версии. Есть для 88.0.4324.96, его как раз и скачал, и с ним как раз и не работает.
Кто нибудь сталкивался? Чего сделать, чтоб заработало? Какой драйвер и где взять? Или дело вообще не в драйвере?
Поиск минимальной даты в ячейках текстового формата через VBA
 
Да, вероятно так и есть.
Ладно, всем большое спасибо за помощь! Значит будет массив + цикл. Я просто думал может какой нибудь Evaluate все это можно было как то просто записать в одну строчку.
Как правильно сделать подсчёт очков турнира
 
Да, с такой структурой таблицы и неизвестным числом игроков формулу врядли напишешь, да и кодом это будет на сотню строк с кучей проверок.
Поменял немного структуру таблицы, в которую вносятся очки. Можно конечно было через банальную умную таблицу и свод это сделать, но я решил заморочиться с Dictionaris, заодно вспомнить как они работают.
Держите.
Изменено: VasiliY_Seryugin - 18.01.2021 13:15:51
Поиск минимальной даты в ячейках текстового формата через VBA
 
Юрий, спасибо за ответ! Но циклом я знаю как сделать.
Суть в том что есть Куб OLAP, из которого даты выгружаются в текстовом формате. И таких дат, допустим, 400 тыс. строк.
И нужно найти минимальную и максимальную даты с минимальными времязатратами. Делать дополнительные столбцы на листе для преобразования 400 тыс. строк не хочется, формулу массива записывать на лист для 400 тыс. строк тоже не хочется.
Циклом в целом это обработать не долго займет, особенно если в массив загнать, но я думал может быть эту формулу можно просто записать и посчитать в VBA, при этом физически не записывая ее на лист (и не использую цикл для решения).
Изменено: VasiliY_Seryugin - 18.01.2021 11:39:39
Поиск минимальной даты в ячейках текстового формата через VBA
 
Всем привет! Думаю простой вопрос для знатоков.
Есть лист, на нем есть Range с датами, записанными в текстовом формате. Нужно через VBA в этом Range найти минимальное значение даты.
При этом не нужно менять формат самих ячеек на листе и записывать формулу на лист (через формулу массива, записываемую на листе, я знаю как это сделать, но хочу понять как это делать, ничего не меняя на листе и не записывая на него).
Как это сделать циклом (в т.ч. массивом + циклом) я тоже знаю. Но мне кажется что есть способ просто записать формулу, которая будет работать как формула массива, через WorksheetFunction, и никаких циклов не понадобится. Итого вопрос звучит примерно так: во вложении пример с попытками записать формулы типа "формул массива" через WorksheetFunction. Как их записать правильно?
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Ребят, всем спасибо за ответы! Вы просто недооценили уровень моего незнания VBA  :)
У меня как раз вот и есть проблема с тем, как записать, что "операция удалась" или "операция не удалась"?

Цитата
vikttur написал:
Do While задача_не_выполнена        '...........    Loop
Вот как это кодом записывается?
Do While [код] = Error или как?

Цитата
vikttur написал:
Do        '...........    Loop Until задача_выполнена
И это как записывается?
Do ... Loop Until [код] <> Error?
Do ... Loop Until [код] IS NOT Error?
Do ... Loop Until [код] NOT IsError?


Цитата
vikttur написал:
 If задача_выполнена Then Exit For
Как записать проверку, что "задача выполнена", т.е. строка кода выполнена и не дала ошибку?

Вот на столько у меня все плохо с VBA.
Логика то операции мне понятна, у меня проблемы с синтаксисом.
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Ігор Гончаренко,  ничего не могу возразить.
Так уж вышло, что знания набираю по ходу практики.
Вот теперь благодаря вам буду знать команду, считывающую номер ошибки, наверняка в будущем пригодится.
Сам бы наверное не скоро до этого дошел тоже;)
Страницы: 1 2 3 След.
Наверх